【问题标题】: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 大小。

【问题讨论】:

  • O(10000^2) 与 O(1) 相同。

标签: python performance time-complexity big-o


【解决方案1】:

嵌套循环本身作为整个函数的一个组成部分,不会随着输入的大小而缩放,因此会在恒定时间内运行。

函数作为一个整体在O(n) 时间内运行,因为最终的 for 循环的时间增加与输入 arr 的大小成正比。

【讨论】:

    【解决方案2】:

    在典型用法中,O 表示法是渐近的,也就是说,它指的是非常大的 x。在这种情况下,“增长最快”的术语的贡献最终会使其他术语变得无关紧要。所以这里的复杂度是 O(n),因为循环遍历数组。

    【讨论】:

      【解决方案3】:

      这取决于您想描述您的复杂性的精确程度。正如我们从书中得知的,时间复杂度显示了操作数 N 与输入大小 n 的关系。基于这个陈述,我们可以说你的算法总是为第一个循环执行恒定数量的操作,第二个循环打印每个元素,因此复杂度将为O(n)。所以我想说只有第二个循环取决于输入,因此时间复杂度是O(n)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-01
        • 1970-01-01
        • 2019-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        相关资源
        最近更新 更多