C++ 计算时间复杂度--斐波那契 --二分查找
2017-05-26 12:46
288 查看
时间复杂度&空间复杂度
时间复杂度:算法的时间复杂度是一个函数(数学里的函数—计算运算次数),描述算 法的运行时间,用O表示(—一般关注算法的最坏的运行时间)延伸:递归算法的时间复杂度—递归总次数*每次递归次数
二叉树的时间复杂度—O(log2n)==O(lgN)—折半查找
空间复杂度:也用O表示,(对象的个数)
延伸: 递归算法—递归深度N*每次递归的空间大小,如果递归深度为常数,则 空间复杂度为O(N)
例:用斐波那契(Fibonacci)算法分析
递归:
//1 1 2 3 5 8 //递归 int Fib(int n) { //递归结束条件(子问题) if(n == 1||n == 2)//前两项 { return 1; } else return Fib(n-1)+Fib(n-2);//最后一项就是前两项的和 //return n<2?n:Fib(n-1)+Fib(n-2); }
用递归:其时间复杂度为O(2^n),空间复杂度O(n)
非递归:
//非递归 int Fib(int n) { int a1 = 0; int a2 = 1;//1 int a3; int i; for(i = 2;i<=n;i++)//n最小为2 { a3 = a2 +a1; a1 = a2; a2 = a3; } return a3; }
int main() { int a; int n = 6; a = Fib(n); printf("%d",a); system("pause"); return 0; }非递归:时间复杂度为O(n),空间复杂度为O(1)
例:二分查找(BinarySearch)
递归:
//递归 int BinarySearch(int *p,int key,int left,int right) { if(left>right) { return -1; } int mid = left +(right - left)/2; if(p[mid] == key) { return p[mid];//应返回mid坐标的值,而不是mid坐标 } return p[mid]>key?BinarySearch(p,key,left,mid-1):BinarySearch( p,key,mid+1,right);//大于和小于两种情况 } int main() { int a; int arr[] = {1,2,3,4,5,6,7,8,9}; int left = 0; int right = 8; a = BinarySearch(arr,7,left,right); printf("%d",a); system("pause"); return 0; }
用递归:时间复杂度为O(log2n)<以2为底,n的对数>
非递归:
//非递归 int BinarySearch(int *p,int key ) { int left = 0; int right = 8; int mid = 0; while(left<=right) { mid = left - (left-right)/2; if(p[mid] == key) { return p[mid]; } else if(p[mid]<key) { right = mid - 1; } else { left = mid + 1; } } return -1; } int main() { int a; int arr[] = {1,2,3,4,5,6,7,8,9}; a = BinarySearch(arr,10); printf("%d",a); system("pause"); return 0; }时间复杂度:O(n)
相关文章推荐
- 二分查找时间复杂度的计算
- 二分查找时间复杂度的计算(转)
- 二分查找时间复杂度的计算(转)
- 二分查找时间复杂度的计算
- 二分查找时间复杂度的计算
- 二分查找时间复杂度推导
- 分析时间复杂度&空间复杂度,以二分查找和斐波那契数的递归和非递归算法为例
- 快速排序和二分查找时间复杂度详解
- 递归的定义以及递归的示例(计算阶乘、计算斐波那契数、递归二分查找、回文串递归方法解决、汉诺塔问题、递归选择排序问题)
- java 二分查找计算时间复杂度
- 彻底轻松搞定顺序存储结构元素的二分查找的时间复杂度优势以及如何算时间复杂度
- 二分查找的时间复杂度计算
- 【C/C++】空间复杂度和时间复杂度的计算
- 二分查找与斐波那契数递归与非递归的时间复杂度与空间复杂度
- 以斐波那契数列和二分查找为例——探究时间复杂度 和 空间复杂度
- 数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)
- 二分查找时间复杂度计算与分析
- 二分查找以及二分查找的时间复杂度
- 关于使用二分思想算法的时间复杂度的计算
- C++中的二分查找