【问题标题】:time complexity of iteration in pythonpython中迭代的时间复杂度
【发布时间】:2017-12-02 20:22:42
【问题描述】:

我有一个关于在 python 中遍历列表的问题。 假设我有列表 A = [1, 2, 3, 4] 和 B = []。使用这两个周期有什么区别(如果有的话)?我对时间复杂度很感兴趣。

for i in range(len(A)):
    B.append(A[i])

for i in A:
    B.append(i)

【问题讨论】:

    标签: python iterator time-complexity


    【解决方案1】:

    这两个操作循环的时间复杂度相同

    这样想:

    他们需要进行多少次迭代?

    他们都必须做len(A) 循环次数。因此,它们将花费相同的时间。


    另一种写法是O(n)。这是Big-O-Notation 的示例,仅表示时间复杂度为linear - 即如果列表从长度5 --> 10 变为长度相同,则两个操作将花费相同的时间从长度变为1000 --> 1005

    --

    在另一个答案中从这个伟大的explanation 偷来的下面的图可以清楚地看到其他时间复杂性:

    【讨论】:

      【解决方案2】:

      根据this question/answer,len(A) 的时间复杂度为 O(1),因此它不会增加您提到的第一个循环的复杂性。两种可能性都必须进行 n 个循环,其中 n 是 A 的长度。 总而言之,这两种可能性的时间复杂度都是 O(n)。

      【讨论】:

        【解决方案3】:

        每个循环都是O(n),或线性时间:

        for i in range(len(A)):
            B.append(A[i])
        
        for i in A:
            B.append(i)
        

        每个append 操作都是O(1),在B.append(A[i]) 发生的索引也是O(1)。因此,此代码块的整体时间复杂度为:

        T(N) = O(n) + O(n) = 2*O(n) => O(n)
        

        因为 Big - O 测量最坏情况。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-28
          • 1970-01-01
          • 2019-01-26
          • 2023-03-04
          相关资源
          最近更新 更多