最坏情况与O(n)

时间:2010-11-01 00:10:35

标签: time-complexity asymptotic-complexity

语句“算法A的最差情况运行时间”和“算法A的运行时间是否为O(n)”之间是否存在差异?

我认为“没有区别”,因为最坏的情况是函数可以采用的峰值运行时间,O(n)表示函数“受限”。两者都有相同的含义。

希望我的逻辑是正确的。

4 个答案:

答案 0 :(得分:7)

有区别。

算法是O(f)不精确:你必须说alogirthm是O(f)的最佳/最差/平均情况。你可以说O(f)是最好的,最坏的和avarage是相同的,但那并不常见。

答案 1 :(得分:1)

我同意你的观点,但有一些常见的算法(例如quicksort),它们的预期时间比最坏的情况要好得多。你可以声称quicksort是O(N ^ 2)最坏的情况,但是你仍然期望它几乎总是O(N * log N)(至少对于一个好的实现来说)。

对于具有摊销行为的算法,它也变得复杂。对于一个特定操作,您可能得到O(N)或O(log N),但是在摊销意义上,连续的许多操作总是为O(1)。 Splay树和手指树是此类别中的好例子。

答案 2 :(得分:1)

作为绝对度量的运行时间通常不如添加更多数据时的时间增加更重要。例如,由于运行时间随数据集大小线性增加,因此总是需要5秒来处理100个项目,10秒来处理200个项目等等的算法被称为O(N)。如果第二个算法花了5 * 5 = 25秒来处理这200个项目,它可能被归类为O(N ^ 2)。这里没有“峰值运行时间”,因为当您向其投入更多数据时,运行时间总是会增加。

事实上,大O是一个上限 - 所以你可以说第一个算法也是O(N ^ 2)(如果N是一个上限,N * N更高,因此也是一个上限,虽然一个更宽松的)。表示其他边界的常用符号包括Ω(ω,下界)和Θ(theta,同时下限和上限)。

某些算法(例如,Quicksort)根据提供给它的数据表现出不同的行为 - 因此最坏的情况是O(N ^ 2),即使它通常表现得像是O(N log N)。 / p>

答案 3 :(得分:0)

这些词串之间存在巨大差异。 “算法A的最坏情况运行时间”是名词子句,它根本不做任何陈述。 “算法A的运行时间是O(n)”是一个句子,告诉我们关于A的事情。