【问题标题】:Time complexity of while loop until list is empty?直到列表为空的while循环的时间复杂度?
【发布时间】:2021-09-05 05:37:55
【问题描述】:

我的伪代码目前构造为:

WHILE list is not empty
   FOR item in list
      do stuff to find an item that matches certain criteria
   REMOVE matching item from list

我很难确定时间复杂度是多少,因为每次迭代后列表会越来越小。有什么想法吗?我认为是 o(n),因为每次 while 迭代只有 1 个 for 循环。

【问题讨论】:

    标签: performance loops time big-o


    【解决方案1】:
    1. 小心。 o(n) 和 O(n) 非常不同。

    2. “每次迭代只有一个 for 循环” - 一个循环不是恒定时间,所以你的论点是错误的。

    3. 您似乎认为总有一个可以删除的“匹配项”。如果这不是真的,那么你的算法就有致命的缺陷。

    除非在删除项目时要匹配的条件发生变化,否则您可以通过循环而不在开始时重新开始搜索,因此可以在 O(n) 中完成,其中 n 是初始列表。

    【讨论】:

    • 谢谢。标准将在整个循环中保持不变,但其基础会发生变化。对于每个 for 循环,每个元素都将与另一个“可比较”值进行比较,最接近该值的元素将被删除。然后将“可比较”值更改为刚刚删除的项目。因此,我不能只遍历列表一,因为我必须多次遍历它,直到它为空并且所有最接近的值都被一一打印。
    猜你喜欢
    • 2022-01-19
    • 2013-12-08
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多