第二节:算法复杂度
1、引入
- 时间复杂度
- 空间复杂度
O(N)😮 Notation
int a=0,b=0;
for (i=0; i<N ; i++)
a=a+rand(); #N*一个操作
b=b+rand(); #N*一个操作
for (j=0; j<N/2;j++)
b=b+rand();#N/2*一个操作
时间复杂度:o(N)
空间复杂度:两个单位的内存空间O(1)
int a=0;
for (i=0;i<N;i++){
for (j=N;j>i;j--){
a=a+i+j;
}
}
时间复杂度O(N^2)
空间复杂度O(1)
int a=0,i=N;
while(i>0){
a+=i;
i/=2;
}
时间复杂度O(logn)
我们每当说算法x的效率要高于y时是指?
x的时间复杂度小于y
定理
如果x的时间复杂度要优于y的时间复杂度,只有N足够大时,可以保证x的实际效率要优于y的实际效率吧
常见复杂度排序
O(1)<O(log n)<O(n)<O(nlogn)<O(n^ 2) < O(n^ 3 ) < O(2^n)