有人可以向我解释为什么这段代码的运行时复杂度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;
}
答案 0 :(得分:1)
假设每一行假定花费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来自n = n/2;
和result = result +1;
每个执行log 2 n次。
注意:强>
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。