赞
踩
对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。
1:实现二分查找算法的递归及非递归。(分析时间复杂度及空间复杂度)
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<assert.h>
-
-
- //非递归
- //时间复杂度 O(log2 N) 空间复杂度O(1)
- int binaryfind1(int a[], int key, int n)
- {
- assert(n);
- int start = 0;
- int end = n ;
- while (start <= end)
- {
- int mid = start + ((end - start) >> 1);
- if (key < a[mid])
- end = mid - 1;
- else if (key>a[mid])
- start = mid + 1;
- else
- return a[mid];
- }
- return NULL;
- }
-
-
- //递归
- //时间复杂度:O(log2 N)空间复杂度:O(log2N )
-
- int binaryfind2(int a[], int start, int end, int key)
- {
- if (start <= end)
- {
- int mid = (start + end)>>1;
- if (key == a[mid])
- return mid;
- else if (key<a[mid])
- return binaryfind2(a, start, mid - 1, key);
- else if (key>a[mid])
- return binaryfind2(a, mid + 1, end, key);
- }
- else
- return -1;
- }
-
-
- int main()
- {
- int a[] = { 2,3,4,5,6,7 };
- //printf("%d\n",binaryfind1 (a, 2, sizeof(a) / sizeof(a[0])));
- printf("%d\n", binaryfind2(a,2,7,5));
- system("pause");
- return 0;
- }
2:实现斐波那契数列的递归及非递归。(分析时间复杂度及空间复杂度)
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<assert.h>
-
- //递归算法
- //(1)要想求解F(n),必须先计算F(n-1)和F(n-2),计算F(n-1)和F(n-2),又必须先计算F(n-3)和F(n-4).....以此类推,直至必须先计算F(1)和F(0),然后逆推得到F(n-1)和F(n-2)的结果,从而得到F(n)要计算很多重复的值,在时间上造成了很大的浪费,算法的时间复杂度随着N的增大呈现指数增长,时间的复杂度为O(2^n),即2的n次方。
- (2)空间复杂度为O(n)
-
- int fib1(int n)
- {
- while (n < 2)
- return n;
- while (n >= 2)
- return fib1(n - 1) + fib1(n - 2);
- }
-
-
- //非递归
- //(1)从n(>2)开始计算,用F(n-1)和F(n-2)两个数相加求出结果,这样就避免了大量的重复计算,它的效率比递归算法快得多,算法的时间复杂度与n成正比,即算法的时间复杂度为O(n).
- (2)空间复杂度为O(1)
-
- long long fib2(int n)
- {
- int i = 0, f1 = 0, f2 = 1, f3 = 0;
- if (n < 2)
- return n;
- if (n >= 2)
- for (long long i = 2; i <= n; i++)
- {
- f3 = f1 + f2;
- f1 = f2;
- f2 = f3;
- }
- return f3;
- }
-
- int main()
- {
- printf("%d\n",fib1(6));
- //printf("%d\n", fib2(6));
- system("pause");
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。