考虑:
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吗?
答案 0 :(得分:3)
内部循环以1
的跳数从n
(包括)运行到i
(不包括)。因此,这意味着它将执行(n-1)//i
个步骤。
外部循环使n
在i
到1
的范围内运行。我们可以通过计算总步数来高估总步数:
n
在这里我们可以使用Stirling近似:我们知道 1 / i 的积分将在 1 /(i + 1)和 1 / i 。
1 / i 的积分,因此我们将其近似为:
n n
--- ---
\ n-1 \ 1
/ --- = n-1 * / ---
--- i --- i
i=1 i=1
因此,这意味着总步数为
答案 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))