【问题标题】:What is the time-complexity of this nested for loop?这个嵌套 for 循环的时间复杂度是多少?
【发布时间】:2015-01-25 22:36:07
【问题描述】:

我在 python 中有以下代码:

def mystery(n):
    if n <= 50 :
        for i in range(n) :
            for j in range(n) :
                print i*j
    else :
        mystery(n-1)

对于下面的嵌套for循环:

for i in range(n) :
    for j in range(n) :

对于n 中的每个ij 迭代n 多达i 次。那么复杂度不应该是O(n^2)吗?但是,我的同行告诉我不是,有人可以解释原因吗?

【问题讨论】:

  • 如果 n&lt;=50 它的 O(n^2)

标签: python big-o time-complexity


【解决方案1】:

这些循环仅在n &lt;= 50 时执行,因此它们只是对非平凡但恒定工作量的简明描述。最多执行 2500 个print 语句。 2500 与任何常数一样,与渐近复杂度无关。只有限制中的行为(即 n 无限制地增长)才是重要的。

对于较大的 n,该函数只是从 n 倒数到 50。这部分需要 O(n) 时间,因此 mystery 整体的时间复杂度是线性的。

【讨论】:

  • 这几乎是我被告知的内容,但我得到的答案相互矛盾,我如何确定哪个是正确的?
  • 包括Big-O正在处理n的大值!亲爱的主,这是另一个答案-.-
  • 所以,我猜如果没有 if 语句(忽略递归部分),那么函数将是 O(n^2)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多