Python中嵌套For循环的时间复杂度
Posted
技术标签:
【中文标题】Python中嵌套For循环的时间复杂度【英文标题】:Time Complexity of Nested For Loop in Python 【发布时间】:2022-01-21 22:58:08 【问题描述】:请问下面嵌套的for
循环的时间复杂度是多少?
编辑。我认为这个问题的答案取决于另一个问题,我不知道是否有“规范”的答案。
这个问题是,O(n)
、O(n^2)
等 big-O 表达式中的 n
是明确引用名为 n
的输入参数,还是表示输入大小的一般值。
到目前为止给出的一些答案似乎与这里给出的答案相矛盾:https://***.com/a/23361893/3042018 如果可能的话,我希望能更清楚一些。
for i in range(n):
for j in range(m):
print(i, j) # Output statement occurs n * m times.
我认为 O(n^2) 因为每个循环都是 O(n),但我想知道它是否可能是 O(nm),以及这些是否实际上是同一件事。
【问题讨论】:
这能回答你的问题吗? Time complexity of nested for-loop 这取决于您考虑的输入是什么,如果您的意思是n
和m
,那么是的,循环是O(N*M)
您是否假设将任意大的整数转换为十进制然后打印它需要 O(1) 时间?
【参考方案1】:
你有 n 个循环乘 m 个循环。例如,对于每个 n 循环,您必须执行 m 循环。这意味着 O(n) * O(m) 等于 O(n*m)
【讨论】:
我已对我的问题进行了编辑。这个答案:***.com/questions/526728/… 与你的相矛盾。请问您能提供什么进一步的说明吗? @RobinAndrews 您链接的答案中的推理不正确。如果 n 和 m 在这些循环中是独立的量,则运行时间是 O(nm) 而不是 O(n^2)。【参考方案2】:在您的代码中,您引入了两个变量,n 和 m。如果没有关于它们的更多信息,我们能做的最好的就是说时间复杂度是 O(nm),正如其他答案已经说明的那样。
您可能会对其他示例(例如您发布的链接中的示例)包含更多我们可以使用的信息这一事实感到困惑。如果我们知道别的东西,例如 m = 2n,那么我们可以简化 O(nm) = O(2n2) = O(n2),这可能是该问题的信息更丰富的答案。但是,它不会改变您的循环执行 O(nm) 次这一事实。
在您当前的算法描述中,没有任何内容告诉我们可以像您建议的那样简化为 O(n2)。如果 m 已经是 n2 怎么办?然后我们得到O(n3)。
一般来说,大 O 符号对您测量的内容没有任何要求。您自己决定要用哪些变量或哪些变量来表达它。任何对传达您的信息有用的东西。实际上,在谈论算法的时间复杂度时,这些变量通常代表输入的大小,但它们并非必须如此。它们可以只是数字,作为函数的输入。或表示作为输入给出的数字所需的位数。只要您以明确的方式定义它们并选择它们以帮助传达您的信息,就可以了。
【讨论】:
【参考方案3】:对于列表 n 中的每个元素,整个列表 m 被迭代。也就是说,你有 m * n 次打印,时间复杂度为 O(m * n)
【讨论】:
我已对我的问题进行了编辑。这个答案:***.com/questions/526728/… 与你的相矛盾。请问您能提供什么进一步的说明吗?以上是关于Python中嵌套For循环的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章