为什么要教Big O而不是Big Theta?


21

大O表示法为函数提供了上限,而大Theta提供了严格的约束。但是,我发现Big O符号在真正意义上是Big Theta时通常被(非正式地)教授和使用。

例如,“ Quicksort是O(N ^ 2)”可以变成更强大的陈述“ Quicksort是Θ(N ^ 2)”

尽管从技术上讲Big O的使用是正确的,但是更普遍地使用Big Theta不会更具表达性,并且可以减少混乱吗?有什么历史原因可导致这种大O的使用更为普遍?

维基百科注释:

非正式地,尤其是在计算机科学中,通常允许在某些情况下使用Big O表示法来描述渐近紧边界,在这种情况下,使用Big ThetaΘ表示法实际上可能更合适。


3
我知道这与问题无关,但是quicksort不是theta(N ^ 2)。是O(N ^ 2)。
jsternberg 2011年

Big O是初学者/非CS人士需要知道的。Big Theta是算法介绍中涵盖的内容,并非每个专业都可以采用。那些拥有算法课程的人可以根据需要更深入地了解Big O表示法。我不确定维基百科的报价是指什么。使用学术出版物,如果您将Big O和big Theta弄混了,就会在会议上碰壁。有些人一生都在追逐Theta,而这些都是HARD HARD问题。
工作

@jsternberg从技术上您是正确的。这也是正确的,但没有意义:“在任何情况下(最差,最好,...)的Quicksort都是O(n ^ 100)。但是我同意OP应该更准确:QuickSort最坏的情况是Theta(N ^ 2),QuickSort的最佳情况是Theta(NlogN),因为在每种情况下,我们都会得到不同的功能
Eldar

Answers:


26

因为通常在分析性能时您只对最坏的情况感兴趣。因此,知道上限就足够了。

当它的运行速度比给定输入的预期速度快时-没关系,这不是关键点。这些信息几乎可以忽略不计。

正如@Peter Taylor指出的那样,某些算法根本没有严格的界限。例如参见quicksort,它是O(n ^ 2)和Omega(n)。

此外,严格界限通常更难计算。

也可以看看:


6
但是Big O并不一定对应最坏情况下的性能。我可以说quicksort在O(2 ^ n)中运行并且是100%正确的。如果我说算法X在Theta(N ^ 2)中而不是O(N ^ 2)中运行,那将更有意义。
tskuzzy 2011年

同样,在分析算法时,几乎总是计算严格的边界,而不仅仅是上限。我在问为什么人们在可能的时候不仅仅使用更具表现力的theta符号。
tskuzzy 2011年

9
我告诉你为什么大多数程序员不使用它。我们很懒,不需要那么多的准确性。如果您愿意,没有人会阻止您使用大theta。快去做 您的算法选择很可能不会从中受益匪浅。我从未听说过程序员会因O大符号而感到困惑。我也完全不会感到困惑。
猎鹰

9

原因之一是在很多情况下Θ未知。例如,矩阵乘法为O(n ^ 2.376),但没有已知的严格界限。当然,据我所知,有开往矩阵乘法一紧,但我们不知道它的价值。


但这将是问题运行时间的界限,而不是特定的算法。虽然通常可以比三次时间更快地解决矩阵乘法,但无论如何,朴素算法都是Θ(n ^ 3)。
tskuzzy 2011年

5
@tskuzzy,参加quicksort。它没有Theta限制,因为它是O(n ^ 2)和Omega(n)。
彼得·泰勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.