【问题标题】:Time Complexity of this double loop这个双循环的时间复杂度
【发布时间】:2016-10-30 18:28:37
【问题描述】:

这段代码的时间复杂度是多少?

 for(int i = 1 ; i <= b ; ++i )
     for(int j = i ; j <= b ; j += i )

【问题讨论】:

  • 类似于 b x b x ln(b):见谐波级数。

标签: c++ time complexity-theory


【解决方案1】:

您可以将循环扩展为如下内容:

i = 1 ——>   1,2,3,…,b     b
i = 2 ——>   1,3,5,…,b     (b/2)
i = 3 ——>   1,4,7,…,b     (b/3)
i = 4 ——>   1,5,9,…,b     (b/4)
  …
i = b ——>   1, b          (b/b = 1)

这扩展为形式的总和:

b + b/2 + b/3 + … + b/b = b * (1 + 1/2 + 1/3 + … + 1/b)

您可能会将第二个因素识别为Harmonic Series。然后,使用以下 SO 答案的结果:Finding Big O of the Harmonic Series 您可以获得嵌套循环的大哦:

O(b * log(b))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多