嵌套for循环的计算复杂度

时间:2019-09-07 21:33:44

标签: python for-loop

当我以5的n值运行此代码时,得到25。当我以n值为3的代码运行时,得到9。我理解输入和输出之间存在n ^ 2关系,但是为什么要这样做5的值,我得到n ^ 2以及如何?有人可以进一步解释吗?

n = input()
n = int(n)

count = 0

for i in range(n):
    for j in range(n):
        count += 1

print("n =",n, "count =",count)

1 个答案:

答案 0 :(得分:3)

for循环为iterable中的每个值执行一次循环体。在这两个循环中,一个可迭代的对象是range(n)对象,该对象产生从n0的{​​{1}}值序列,因此循环体被执行{{1} }次。

对于内部循环,循环主体为n - 1,但是内部循环本身嵌套在外部循环中。

您可以展开循环并复制其主体n次。让我们在代码中填写count += 1

n

对于n = 3count = 0 for i in range(3): for j in range(3): count += 1 对象产生n = 3range()0,它们分别由外循环分配给1。然后,可以通过用手动2分配替换循环并在其下面复制内部循环(调整缩进)来展开外部循环:

i

然后我们可以进一步展开内部循环,分配给i = <value>

count = 0

i = 0
for j in range(3):
    count += 1

i = 1
for j in range(3):
    count += 1

i = 2
for j in range(3):
    count += 1

因此,对于j,我们必须将外部循环展开为3个独立的内部循环,然后将每个内部循环展开为另外3个count = 0 i = 0 j = 0 count += 1 j = 1 count += 1 j = 2 count += 1 i = 1 j = 0 count += 1 j = 1 count += 1 j = 2 count += 1 i = 2 j = 0 count += 1 j = 1 count += 1 j = 2 count += 1 调用,共3次3 == 9 {{1} }。

将其推广到任何n = 3意味着您将count += 1count += 1应用于最内层循环代码n的幂2迭代。

当然,对于更复杂的代码,多次复制循环主体以弄清正在发生的事情变得不切实际。相反,您可以通过添加n * nn语句或使用调试器逐步检查代码来告诉Python它在做什么。