【问题标题】:Complexity for nested loops dividing by 2嵌套循环除以 2 的复杂度
【发布时间】:2013-05-20 20:25:23
【问题描述】:

我正在尝试使用大 O 表示法来计算 for 循环的复杂性。我以前在其他课程中也这样做过,但是这个比其他的更严格,因为它是在实际算法上的。代码如下:

for(i=n ; i>1 ; i/=2) //for any size n
{
    for(j = 1; j < i; j++)
    {
      x+=a
    }
}

我知道第一个循环是 O(log_2(n))。至于第二个循环,我有点失落!感谢您在分析中的帮助。

【问题讨论】:

  • 如何简化总和 n + n/2 + n/4 + ...
  • @OliCharlesworth 我不明白n + n/2 + n/4 + ... 等于nlogn
  • @Rüppell'sVulture:没有。
  • @Rüppell'sVulture:大概是因为有些人(错误地)认为这是正确的答案。
  • @OliCharlesworth 如果是O(n),那也是O(n*log n),所以没有

标签: c loops big-o


【解决方案1】:

内循环的总迭代次数为n + n/2 + n/4 + ... + 1,大约为2n。所以复杂度是O(n)。

【讨论】:

    【解决方案2】:

    复杂度应该是O(n)。它形成了一个几何级数(不是精确的而是近似的)。

    循环运行n+ n/2 + n/4 + .... +1,大约是2n

    还有O(2n) = O(n)

    【讨论】:

      【解决方案3】:

      要正式解决算法的时间复杂度,您可以使用以下带有 Sigma 表示法的步骤:

      另外,看看 Jauhar 博士的这张非常有趣的document 的最后一张幻灯片。

      【讨论】:

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