大O效率并不总是完全证明?

时间:2014-10-14 18:28:50

标签: performance big-o

我一直在学习学校的高效率作为“转到”方法来描述算法运行时比其他人更好或更差但我想知道的是效率更高的算法总是优于最差的算法就像在每种情况下冒泡排序一样,是否有任何情况下,冒泡排序或O(n 2 )算法对于任务比具有较低O()运行时的另一算法更好?

2 个答案:

答案 0 :(得分:3)

通常,O()表示法给出特定算法的渐近增长。也就是说,算法在渐近增长方面所处的较大类别表示算法在n增长时运行需要多长时间(对于某些 n 项目的数量)。

例如,我们说如果给定的算法是 O(n),那么它“线性增长”,这意味着当 n 增加时,算法将采用与任何其他 O(n)算法一样长。

这并不意味着完全正如 O(n)那样增长的任何其他算法,因为我们忽略了一些事情。例如,如果算法的运行时间正好 12n + 65ms,而另一个算法需要8n + 44ms,我们可以清楚地看到,对于n = 1000,算法1将需要12065ms运行和算法2将需要8044ms才能运行。显然算法2需要更少的时间来运行,但它们都是 O(n)

还有一些情况,对于n 的小值,一个O(n 2 )的算法可能胜过另一个算法O(n),由于运行时中未在分析中考虑的常量。

基本上,Big-O表示法为您提供算法的复杂度估计值,可用于比较不同的算法。但是,在应用方面,您可能需要深入挖掘以找出最适合给定项目/程序的算法。

答案 1 :(得分:-2)

Big O为您提供最糟糕的演员场景。这意味着它假定在最坏的情况下输入它也忽略了系数。如果您对反向排序的数组使用选择排序,则它将在n^2时间运行。如果对已排序的数组使用选择排序,则它将在n时间内运行。因此,选择排序比已经排序的列表上的许多其他排序算法运行得更快,并且比反向排序列表上的大多数(合理)算法慢。

编辑:抱歉,我的意思是插入排序,而不是选择排序。选择排序始终为n^2