【问题标题】:While loop, for loop, flag and complexitywhile循环、for循环、标志和复杂度
【发布时间】:2020-09-23 20:05:43
【问题描述】:

如果我有一个 for 循环来搜索某些东西,并且它被一个 while 循环包围,那么它是否是 O(N^2) 尽管从未运行过两次 while 循环? 例如,在集合中搜索 6

int location;
while (found == false AND quit == false)
    foreach data x in collection
        if x == 6
            location = 6
            found = true // exit prematurely
         end if
    end for
    quit = true // exit here after for loop
end while

这个算法的复杂度是多少?

【问题讨论】:

    标签: loops big-o complexity-theory


    【解决方案1】:

    不,不是O(N^2)。 Big-O 描述了您的算法的最坏情况。考虑在这种情况下最坏的情况是什么。如果您试图找到号码 6ints 的集合,那么最坏的情况是它显然不存在。

    因此,如果您的号码不存在,您将在 foreach 中遍历整个列表,然后无论如何都完成。

    所以,这段代码的 Big-O 实际上是 O(N)。

    这里使用while是完全不正确的。

    【讨论】:

    • 感谢您的回复。您将如何在此搜索中设置退出标志?
    • 所以,你可以简单地break for 循环:)
    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2013-12-08
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多