嵌套循环的时间复杂度依赖于外层循环
Time complexity of nested loop dependent on the outer loop
这是一个普通的嵌套循环,具有 n^2
的复杂性
for i in range(n):
for j in range(n): # <-- dependent on n
print(i,j)
我很难理解为什么下一个循环也有 n^2
的复杂性,即使它打印的语句更少
for i in range(n):
for j in range(i): # <-- now it is dependent on i
print(i,j)
有什么想法吗?
我们统计一下最里面的表达式执行的次数,所以我们这样写:
- 我=0; j = 0;最里面执行:0次
- 我=1; j = 0, 1;最里面执行:1次
- 我=2; j = 0, 1, 2;最里面执行:2次
- 我=3; j = 0, 1, 2, 3;最里面执行:3次
- ...
- 我=n; j = 0, 1, 2, ..., n;最里面执行:n次
(对于 j-loop,终止条件以粗体突出显示。当 j-loop 到达它时,最内层的表达式将不会被执行,我们开始 i 的下一次(如果有)迭代-loop.)
因此,我们将有 1+2+3+...+n
。即1/2(n*(n+1))
,即n^2
。这样,时间复杂度还是n^2.
这是一个普通的嵌套循环,具有 n^2
的复杂性
for i in range(n):
for j in range(n): # <-- dependent on n
print(i,j)
我很难理解为什么下一个循环也有 n^2
的复杂性,即使它打印的语句更少
for i in range(n):
for j in range(i): # <-- now it is dependent on i
print(i,j)
有什么想法吗?
我们统计一下最里面的表达式执行的次数,所以我们这样写:
- 我=0; j = 0;最里面执行:0次
- 我=1; j = 0, 1;最里面执行:1次
- 我=2; j = 0, 1, 2;最里面执行:2次
- 我=3; j = 0, 1, 2, 3;最里面执行:3次
- ...
- 我=n; j = 0, 1, 2, ..., n;最里面执行:n次
(对于 j-loop,终止条件以粗体突出显示。当 j-loop 到达它时,最内层的表达式将不会被执行,我们开始 i 的下一次(如果有)迭代-loop.)
因此,我们将有 1+2+3+...+n
。即1/2(n*(n+1))
,即n^2
。这样,时间复杂度还是n^2.