【问题标题】:Big-O Time Complexity of Nested Loop嵌套循环的大 O 时间复杂度
【发布时间】:2019-04-06 13:50:34
【问题描述】:

谁能告诉我以下嵌套循环的时间复杂度是多少:

 for(i=1;i<n;i+=i)
 {
    for(j=1;j<n;j*=j)
       //O(1)
 }

据我所知,这将是 O(log(n)*log(log(n)) 由于外部循环将运行 log(n) 次,因为我们每次迭代都有效地将 i 乘以 2。 在内部循环中,我们在每次迭代中对循环计数器 j 进行平方。 所以最终的复杂度是这两者的乘积。 这是正确的还是有其他答案。 在此先感谢:D

【问题讨论】:

  • for(j=1;j&lt;n;j*=j) - 这应该是 O(infinity) 因为j 永远不会增加(1 乘以 1 仍然是 1)。也许你的意思是例如j=2 作为初始条件? (如果这是一道作业题,那很可能是一道技巧题。)

标签: loops for-loop nested time-complexity big-o


【解决方案1】:

是的,复杂度是O(log2(n) * log2(log2(n)))

内循环的索引j遵循递归关系j(k) = j(k-1)^2,即j(k) = j(0)^(2^k)(归纳证明)。假设j(0) = 2(不是1,否则你会无限循环)。

因此,内循环的迭代次数k验证

    j(k) >= n
<=> 2^(2^k) >= n
 => k >= log2(log2(n))

外循环的迭代次数>=log2(n)

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多