时间复杂度与空间复杂度
为什么要有
确定我们的算法的效率
什么是
时间复杂度:算法运行时间与数据量的关系
更加具体的来说,时间复杂度是操作数量(代码执行条数)
进一步可以分为
- 最差时间复杂度:给出了效率下限,通常使用这个
- 最佳时间复杂度:不要使用
- 平均时间复杂度:有些算法难以计算
空间复杂度:算法占用内存与数据量的关系
一般只关注最差时间复杂度
如何计算
计算步骤
- 统计操作数量
- 忽略常数项和系数
- 循环嵌套时使用乘法
例题
(1)给出下列代码语句的执行次数 [1]
java
int x = 91;
int y = 100;
while(y > 0){
if(x > 100) {
x = x - 10;
y--; // a
} else {
x++; // b
}
}
(2)推导下列函数的时间复杂度
java
void f(int n){
for(int i=1; i<=n-1; i++){
for(int j=i+1; i<=n; j++){
for(int k=1; i<=j; k++){
a++;
}
}
}
}
解:
其中
故
所以时间复杂度为
#Todo : 更多题目需要整理
常见时间复杂度
参考
https://www.hello-algo.com/chapter_computational_complexity/time_complexity/#232
a执行100次,b执行1000次,两条语句一共执行1100次 ↩︎