序言
我们如何判断一个算法的好坏?
我们如何对比不同算法?
一、时间复杂度
「大O表示法」算法的渐进时间复杂度
T(n)=O(f(n))
例题1:
for(int i = 1;i <=n ;i++){
x++;
}
在因为时间复杂度的计算是认为n接近于无限大的情况下,所以
例题2:
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
x++;
}
}
两层循环
拓展:
如果把例题1和例题2的程序同时运行呢?
for(int i = 1;i <=n ;i++){
x++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
x++;
}
}
在n趋于无限大的情况下,用大O表示法,最终可得:
例题3:
int i = 1;
while(i<n){
i=i*2;
}
i每次执行循环都会变为之前的2倍,所以 ,所以:
例题4:
for(int i=0;i<=n;i++){
int i = 1;
while(i<n){
i=i*2;
}
}
可以看出,这个就是在例题3外面套上一个例题1的for循环,所以可得:
二、常用复杂度量级分析
1.常数阶
2.对数阶
3.线性阶
4.线性对数阶
5.平方阶
6.立方阶
7.K次方阶
8.指数阶
9.阶乘
三、空间复杂度
内存空间增长的趋势
常用的空间复杂度:,,。
例题5:
int x = 0;
int y = 0;
x++;
y++;
创建了常数量个变量,所以,空间复杂度为常数阶:
例题6:
int[] newArray = new int[n];
for(int i=0;i<n;i++){
newArray[i] = i;
}
创建了一个数组,数组中要放n个项,所以空间复杂度为n阶:
四、总结
「时间空间复杂度」= 时间和空间增长的趋势