参考资料:
视频内容整理:
假设有如下两段代码块
//执行次数 :2
public void test_01(){
int num = 1;
System.out.println("num :"+ num);
}
//执行3n+2次
public void test_02(int n){
for(int i = 0; i< n; i++){
System.out.println("num :"+ i);
}
}
上述两个代码块,如果被调用,分别会执行2次和3n+2次
第一个代码块被调用,两行代码分别被执行一次
第二个代码块被调用,示意图如下:
所以为3n+2次
如果用T(n)表示执行次数 那么
T(n) = 2;
T(n) = 3n+2
- 算法一般会用T(n)的简化估算值,来衡量代码执行的速度,简化的估算值叫时间复杂度,规则如下:
- 其中 m,n为变量(m为正整数),k1,k2,k3,k4,k5为常数
T(n) = k1 | 当表达式为常数时,那么时间复杂度为1.记为O(1) |
T(n) = k1*n^k2+k3*n^(k2-m)+k4 | 当表达式为变量时,取变量的最高次幂,去系数,那么时间复杂度为n^k2,记为O(n^k2)。如T(n) = 5*n^4-9*n^3+32时间复杂度为n^4,记为O(n^4) |
T(n) = k1*n^k2-k3*n^(k2-m)+k4 |
- 时间复杂度的优劣顺序
-
名称 时间复杂度 常数时间 O(1) 对数时间 O(log n) 线性时间 O(n) 线性对数时间 O(n log n) 二次时间 O(n²) 三次时间 O(n³) 指数时间 O(2^n) - 下面是一些常见的时间复杂度练习:
所以以此类推,有多少重循环,时间复杂度就是n的几次方