在各种算法中都会有它的时间及空间复杂度,将它们分析出来以达到最优可以极大的提升算法速度,下面就来看看它们有哪些分析方法。
一、实现二分查找算法的递归及时间复杂度空间复杂度分析
代码:
# define _CRT_SECURE_NO_WARNINGS#include<stdio.h> #include<string.h> #include<assert.h> int BinarySearch(int arr[], int len, int num) { assert(arr); int left = 0; int right = len - 1; int mid; while (left <= right) { mid = left + (right - left) / 2; if (num > arr[mid]) { left = mid + 1; } else if (num < arr[mid]) { right = mid - 1; } else { return mid; } } return -1; } int main() { int arr[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }; int length = sizeof(arr) / sizeof(arr[0]); int aim = 9; int result; result = BinarySearch(arr, length, aim); if (result == -1) { printf("Can't find %d\n", aim); } else { printf("%d at %d postion\n", aim, result + 1); } return 0; }
二分查找时,会每次都在原有查找内容进行二分,因此时间复杂度为O(log2 n)
又因为变量值创建一次,所以空间复杂度为O(1)
二、实现斐波那契数列的递归及时间复杂度空间复杂度分析
代码:
int FeiBoNaCciInteration(int a, int b, int num) { int c; if (num <= 0) return -1; else if (num == 1) return a; else if (num == 2) return b; else { while (num - 2) { c = a + b; a = b; b = c; num--; } return c; } } int main() { int n; int result; printf("Input n\n"); scanf("%d", & n); result = FeiBoNaCciInteration(2, 3, n); //可自定义输入第一个数和第二个数 if (result == -1) { printf("Input Error!\n"); } else { printf("n is %d\n", result); } return 0; }
时间复杂度O(n)
空间复杂度为O(1)
以上就是本篇文章的所有内容,有想了解更多java常见问题及解决方法的小伙伴,可以关注我们网站了解详情。
推荐阅读: