【问题标题】:Time complexity of dependent and conditional triple for-loop依赖和条件三重for循环的时间复杂度
【发布时间】:2017-10-04 10:27:45
【问题描述】:
for i in xrange(1,n+1):
    for j in xrange(1,i*i):
        if j%i==0:
            for k in xrange(0,j):
                print("*")

上述算法的时间复杂度是多少?

【问题讨论】:

  • 这是我过去考试中的一个问题。经过分析,我发现语句 3 仅适用于 'n' 次。由此我们可以推断出第 5 条语句最多会运行 n**3 次.. 不应该是 O(n^3) 吗?

标签: time-complexity big-o


【解决方案1】:

这听起来像是一个家庭作业问题,但很有趣,所以我会试一试。我们将只计算星号被打印的次数,因为它占主导地位。

对于每个j,只有那些能被i整除的才会触发最内层循环的执行。他们有多少人?好吧,在[1, i*i) 范围内,这些是i, 2*i, 3*i, ..., (i-1)*i。让我们更进一步。 k0 迭代到 j,所以首先我们将有 i 迭代(对于 j=i),然后是 2*i(对于 j=2*i),然后是 3*i.. 直到我们迭代 @ 987654337@次。这是对于每个i,总共有i + 2*i + 3*i + (i-1)*i 打印的星号。由于i0 变为n,迭代总数是所有i + 2*i + 3*i + (i-1)*i 的总和,其中i0 变为n。总结一下:

在这里,我们多次使用了第一个 n 数字之和的公式。在最终总和中占主导地位的因素显然是k^3,并且由于第一个n-1立方体的总和公式是

,

总复杂度为O(n^4)

【讨论】:

  • 看看上面的评论。
  • 其实我目前是通过手机上网..所以我不能很好地描述..看看上面的评论..我认为应该是 O(n**3) 。 . 我将在今天晚些时候更有效地向您解释。
  • @AbhishekKhandelwal 我已经给你写了证明这是O(n^4)的每一行,请仔细检查。如果您仍然不相信,请尝试计算处决次数,例如n3n 足够大 n。您会注意到该比率接近 81。您可以对任意nkn 执行相同操作,您会发现该比率接近k^4
  • @AbhishekKhandelwal 我进一步扩展了我的答案,希望现在更清楚如何获得迭代总数,这给了O(n^4) 复杂性。
  • 但是我的同事相信复杂度是 O(n^5) 。但我无法理解为什么。你能描述一下他为什么说 O(n^5 )。
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2013-01-17
相关资源
最近更新 更多