块代码的运行时

时间:2013-03-10 14:04:55

标签: runtime complexity-theory

有人可以向我解释为什么这段代码的运行时复杂度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 个答案:

答案 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。