【问题标题】:Running time/time complexity for while loop with square root具有平方根的 while 循环的运行时间/时间复杂度
【发布时间】:2015-09-26 14:29:20
【问题描述】:

这个问题看起来比较简单,但是我好像找不到n的运行时间。

问题来了:

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

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

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

请注意,操作类型无关紧要,每执行一行,计为1个时间单位。所以第 1 行只是 1 个时间单位,第 2 行是:

  • 如果 n 为 1,则为 0 个时间单位,
  • 如果 n 为 2,则为 1 个时间单位,
  • 如果 n 为 4,则为 2 个时间单位,
  • 如果 n 为 16,则为 3 个时间单位,以此类推

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

【问题讨论】:

    标签: performance time-complexity code-analysis


    【解决方案1】:

    倒推得到​​第 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

    要扭转这种情况,你有

    当n

    t = log2(log2(n)) + 1 当 n >= 2

    其中 log2(x) 被称为 x 的 binary logarithm

    【讨论】:

    • 对其他人来说可能不准确。这个问题很棘手:S
    • 我诚挚的歉意。我用手机接了电话。我确定是现在。
    猜你喜欢
    • 2013-12-08
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    相关资源
    最近更新 更多