具有平方根的while循环的运行时间/时间复杂度

时间:2015-09-26 14:29:20

标签: performance time-complexity code-analysis

这个问题看起来相对简单,但我似乎无法用n来找到运行时间。

问题在于:

j = n;
while(j >= 2) {
    j = j^(1/2)
}

我真的不需要总运行时间,我只需要知道如何计算第二行和第三行被击中的次数(它们应该是相同的)。我想知道是否有某种公式可以找到这个。我可以看到上面的内容相当于:

for(j = n; n >= 2; j = j^(1/2)

请注意,操作类型并不重要,每次执行一行时,它都会计为1个时间单位。所以第1行只是1个时间单位,第2行是:

  • 0时间单位,如果n为1,
  • 1个时间单位,如果n为2,
  • 2个时间单位,如果n为4,
  • 3个时间单位,如果n为16等,

提前感谢任何提供帮助的人!非常感谢!

1 个答案:

答案 0 :(得分:4)

向后工作以获得第2行的时间单位数:

                                   time
n              n       log_2(n)    units
1              1        0          0
2              2        1          1
4              4        2          2
16             16       4          3
16^2           256      8          4
(16^2)^2       65536    16         5
((16^2)^2)^2)  ...      32         6

换句话说,对于时间单位t的数量,n是2 ^(2 ^(t-1)),除了t = 0的情况n = 1 if(validationfunctions failed) { $error_msg .= '<p class="error">I want to show this message</p>'; return false; } if (!empty($error_msg)) { echo $error_msg; } 1}}。

要反过来,你有

当n <0时,

t = 0。 2

t = log 2 (log 2 (n))+ 1当n> = 2时

其中log 2 (x)被称为x的binary logarithm