一.时间复杂度
定义:在一个算法流程中,所需要的运行时间,一般用O表示。
以下用查找算法为例向大家说明时间复杂度
问题:给你一个数组(已排序),查找某一给定元素,输出下标。
方法一:直接按址查询
void serach(int a[],int b,int n) { for(int i = 0;i<n;i++) { if(a[i] == b) cout<<i<<endl; } }
其中n为数组长度,我们可以看到这种遍历数组的方法的时间复杂度为O(n)
方法二:二分查找
void Binary_Serach(int a[],int b,int n) { int mid,left=0,right=n; bool flag = false; while(left<=right) { mid = (left+right)/2; if(a[mid]==b){ flag = true; cout<<mid<<endl; } if(a[mid]<b) { left = mid+1; } else{ right = mid-1; } } if(flag == false) { cout<<"没找到!"<<endl; } }
二分查找是一直对半取的一种查找方式,即2x=n,这里的x为时间复杂度。x=O(log2n)
时间复杂度是用来衡量一个程序是否优秀的方式。
二.空间复杂度
定义:除去输入输出外完成程序所需要的空间。
一般我们声明一个变量的空间复杂度为常数阶,声明一个不知道大小的一维数组的空间复杂度为O(n)。
我们在写算法的过程中一般会用空间换时间。