【问题标题】:Three loops complexity三环复杂度
【发布时间】:2016-12-01 19:20:30
【问题描述】:

谁能告诉我以下代码的复杂性并解释计算?

int count=0;
for(int i=0; i<n;i++)
    for(int j=i; j<n;j++)
        for(int k=j;k>i;k--)
            count++;

谢谢

【问题讨论】:

  • 可以吗?是的,但他们不适合在这个网站上这样做。 (人们不喜欢在这里被要求为其他人做作业)
  • 我没有要求任何人做作业,我只是需要一些帮助
  • 确实感觉像是做作业。这里有一个提示:计算嵌套循环的数量。找出答案至关重要。
  • 直觉说是 n^3。
  • 好吧,我确实尝试过计数并通过打印 i j k 和计数器实际运行了一些测试,对于 n=4 计数器是 10,对于 n=5 计数器是 20,对于 n=10 计数器是 165 . 它肯定小于 n^3,只是由于某种原因,第三个循环在我看来小于 n……有什么建议吗?

标签: c data-structures time-complexity big-o


【解决方案1】:

这只是一个“简单”的数学:

对于第一个循环,它非常简单,它将执行 n 迭代。

第二个循环并没有那么复杂:

  • i=0:您将有 n 迭代。
  • i=1: n-1 迭代次数
  • i=2: n-2 迭代次数
  • ...
  • i=n-1: 1 迭代

总和是n(n+1)/2

对于第三个循环,我们只对j&gt;i感兴趣:

  • i=n-1:你有 0 迭代。
  • i=n-2: 1 迭代,也就是当j=n-1
  • i=n-32 迭代时 j=n-11 迭代时 j=n-2
  • i=n-43 迭代时 j=n-12 迭代时 j=n-21 迭代时 j=n-3
  • ...
  • i=0: n-1 迭代时 j=n-1, n-2 时迭代 j=2, ..., 1 时迭代 j=1

这个的运行时间是:

O((n-1)n/2 + (n-2)(n-1)/2+...+(n-n+2)(n-n+1)/2+(n-n+1)(n-n)/2)=O((n-1)*(n^2)/2)=O(n^3)

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 2013-01-17
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多