【问题标题】:How do I calculate the time complexity of a nested 'for' loop?如何计算嵌套“for”循环的时间复杂度?
【发布时间】:2019-09-19 18:18:12
【问题描述】:

考虑:

def fun(n):

    for i in range(1, n+1):
        for j in range(1, n, i):
            print (i, “,”, j)

我在使用嵌套的 for 循环时遇到问题。是 2n^2 + 2n + 1 吗?

【问题讨论】:

标签: python time-complexity big-o


【解决方案1】:

内部循环从1(包括)到n(不包括)以i 的跃点运行。因此,这意味着它将执行(n-1)//i 步骤。

外部循环使ni 的范围从1n 处运行。我们可以通过将步数计算为总和来稍微高估总步数:

 n                    n
---                  ---
\     n-1            \    1
/     ---    = n-1 * /   ---
---    i             ---  i
i=1                  i=1

我们可以在这里使用斯特林近似:我们知道积分 if 1/i 将介于 1/(i+1) 之和之间>1/i.

1/i的积分,所以我们近似为:

 n         n
---        /\
\    1     |    1
/   ---  ≈ |   --- dx  = log(n) - log(1)
---  i    \/    x
i=1        1

所以这意味着总步数是,以大哦 O(n log n).

【讨论】:

    【解决方案2】:

    您的代码复杂度为O(n log n)。在第一个 for 循环中,复杂度是 O(n/i),我们总共有:

    O(n/1) + O(n/2) + ...+ O(n/i)+...+O(1)
    

    等于:

    n O( 1 + 1/2 + ... + 1/n ) = n O(log(n)) = O(n log(n))
    

    【讨论】:

    • 不,不是。外部 for 循环是 O(n)。不是吗?
    • 它是内循环 O(n) 的倍数,因为步长是 1
    • O(n) 只发生一次,它是第一个循环的第一次迭代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多