仍然不理解大o和最坏情况下的时间复杂度



线性搜索所花费时间的最坏情况是项目位于列表/数组的末尾,或者不存在。在这种情况下,该算法将需要执行n比较,看看每个元素所需的值,假设n是数组的长度/列表。

根据我对大O符号的理解,可以说这个算法的时间复杂度是O(n),因为最坏的情况可能会发生,当我们想对"最坏情况"做出保守估计时,就会使用大O。

从Stack Overflow上的许多帖子和回答来看,这种想法似乎是有缺陷的,例如Big-O符号与最坏情况分析无关。

请帮助我以一种不会增加我困惑的方式理解这种区别,因为这里的答案是:为什么大哦并不总是算法的最坏情况分析?做。

我不明白为什么大0与最坏情况分析无关。从我目前的角度来看,大0表示的是随着输入大小的增长,最坏情况是如何增长的,这似乎非常"符合"。有最坏情况分析

像这样的语句,来自https://medium.com/omarelgabrys-blog/the-big-scary-o-notation-ce9352d827ce:

作为一个例子,最坏情况分析给出了假设输入处于最坏可能状态下的最大操作数,而大0符号表示在最坏情况下完成的最大操作数。

没有多大帮助,因为我看不出这里指的是什么区别。

非常感谢任何补充说明。

大0符号确实独立于最坏情况分析。它适用于任何你想要的函数。

对于线性搜索,

  • 最坏情况复杂度为O(n)(实际上甚至Θ(n)),

  • 平均情况复杂度是O(n)(实际上甚至是Θ(n)),

  • 最好的情况复杂度是0(1)(实际上甚至是Θ(1))。


所以大o和最坏情况是不同的概念,尽管算法运行时间的大o界必须适用于最坏情况。

情况如下:

如果一个算法找到一个问题的解在O(f(n))中,则表示该算法找到这个问题的解的最坏情况是在O(f(n))中。换句话说,如果算法能在g(n)步中找到最坏的情况,那么g(n)就在O(f(n))中。

例如,对于搜索算法,正如你所提到的,我们知道最坏的情况可以在O(n)中找到。现在,虽然算法在O(n)中,我们可以说算法也在O(n^2)中。如你所见,这就是Big-Oh复杂性和最坏情况的区别。

总而言之,算法的最坏情况复杂度是算法的Big-Oh复杂度的一个子集。

最新更新