如何计算嵌套“ for”循环的时间复杂度?

时间:2019-09-19 18:18:12

标签: python time-complexity big-o

考虑:

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吗?

2 个答案:

答案 0 :(得分:3)

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

外部循环使ni1的范围内运行。我们可以通过计算总步数来高估总步数:

n

在这里我们可以使用Stirling近似:我们知道 1 / i 的积分将在 1 /(i + 1) 1 / i 。

1 / i 的积分,因此我们将其近似为:

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

因此,这意味着总步数为 O(n log n)

答案 1 :(得分: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))