单层时间复杂度计算
一、设执行次数为 t 次
二、列出每次执行变量 i 的值,如:for(int i = 0; i < n; ++i) { ... }
三、找到执行第 t 次 i 的值,即 i = f( t )(公式一)
四、列出程序执行结束的条件 (公式二)
五、根据公式一和公式二解得 t
例题1:
for(int i = 0; i < n; i += 2){
print...
}
解题:
① 设执行次数为 t 次
② i 的值变化为:0 2 4 6 8 10 12...
③ i = f( t ):i = 2*t (公式一)
④ 结束条件: i = n + K(K为常数,即误差值可省略)(公式二)
⑤ 根据公式一、公式二可求出结果 t = i / 2,即 O( n )
例题2
for(int i = 1; i <= n; i *= 2){
print...
}
解题:
①
②
③
④
⑤
时间复杂度: log2n
例题3:
for(int i = 1; (i + 1)(i + 1) < n; ++i){
print...
}
解题:
①
②
③
④
⑤
时间复杂度:n1/2
双层时间复杂度计算
一、根据单层循环公式求出外侧执行次数 t
二、列出外层每次循环执行时,内层执行次数
三、抽象数据为图形
四、计算图形面积
例题1
for(int i = 1; i <= n; ++i){
for(int j = 0; j < i; ++j){
print...
}
}
① 解得外层循环次数为 n
② 外层循环执行时内层执行次数:1 2 3 4 5 6 7 ...
③ 抽象数据为一个直角三角形
③ 计算面积为:n * ( n + 1 ) / 2 ==> O ( n2)
例题2
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
print...
}
}
①
②
③ 抽象数据为正方形
④ n * n ==> O ( n2 )
例题3
for(int i = 0; i < n; i+=2){
for(int j = 1 j <= n; j*=2){
print...
}
}
① 外层执行 n / 2次
② 内层每次循环执行:log2n次
③ 抽象数据为矩形
④ n / 2 * log2n ===>O ( n * log2n )
标签:...,执行,递归,int,公式,复杂度,程序,例题 From: https://www.cnblogs.com/L-TT/p/16870812.html