有人可以向我解释为什么这段代码的运行时复杂度 T(n) 为 2lgn+2。我认为应该是lgn+2。
public static reduce(int n){
int result = 0;
while (n >1){
n = n/2;
result = result +1;
}
return result;
}
有人可以向我解释为什么这段代码的运行时复杂度 T(n) 为 2lgn+2。我认为应该是lgn+2。
public static reduce(int n){
int result = 0;
while (n >1){
n = n/2;
result = result +1;
}
return result;
}
假设每一行都需要 1 个单位的时间(不包括n > 1检查)。
所以int result = 0;, n = n/2;,result = result +1;和return result;每个都归类为花费 1 个单位时间。
2 来自每个int result = 0;执行return result;一次。
2 log 2 n 来自每个被执行 log n = n/2;2 n次。result = result +1;
笔记:
n > 1也可以分类为时间单位,得到 3 log 2 n + 2。
n = n/2;并且result = result +1;每个都可以归类为花费 2 个时间单位,导致(与上述)5 log 2 n + 2。
这都是非常主观的。
对于某些 c 和 d ,唯一的全面协议是 c log 2 n + d。