【问题标题】:If two nested for loops are from range 0 to 10,000, would the big O time be O(1) or O(10,000^2)?如果两个嵌套的 for 循环范围从 0 到 10,000,那么大 O 时间是 O(1) 还是 O(10,000^2)?
【发布时间】:2021-03-06 21:48:14
【问题描述】:
假设我有以下功能
def test(arr):
for i in range(10000):
for j in range(10000):
print("hello world")
for num in arr:
print(num)
总体时间复杂度是多少?我想我对嵌套的 for 循环更加困惑。它们会被认为是 O(10,000^2) 还是只是 O(1),因为它们不依赖于输入 arr 大小。
【问题讨论】:
标签:
python
performance
time-complexity
big-o
【解决方案1】:
嵌套循环本身作为整个函数的一个组成部分,不会随着输入的大小而缩放,因此会在恒定时间内运行。
函数作为一个整体在O(n) 时间内运行,因为最终的 for 循环的时间增加与输入 arr 的大小成正比。
【解决方案2】:
在典型用法中,O 表示法是渐近的,也就是说,它指的是非常大的 x。在这种情况下,“增长最快”的术语的贡献最终会使其他术语变得无关紧要。所以这里的复杂度是 O(n),因为循环遍历数组。
【解决方案3】:
这取决于您想描述您的复杂性的精确程度。正如我们从书中得知的,时间复杂度显示了操作数 N 与输入大小 n 的关系。基于这个陈述,我们可以说你的算法总是为第一个循环执行恒定数量的操作,第二个循环打印每个元素,因此复杂度将为O(n)。所以我想说只有第二个循环取决于输入,因此时间复杂度是O(n)