Insertion sort的运行时为Ω(n)(当输入被排序时)和O(n 2 )(当输入被反向排序时)。平均而言,它以Θ(n 2 )的时间运行。
这是为什么?例如,为什么平均情况不接近O(n log n)?
答案 0 :(得分:2)
为了好玩,我编写了一个程序,该程序遍历所有数据组合,用于计算比较大小为n的向量,发现最好的情况是n-1(所有已排序),最差情况是(n *(n-1)) / 2。
不同n的一些结果:
n min ave max ave/(min+max) ave/max
2 1 1 1 0.5000
3 2 2.667 3 0.5334
4 3 4.917 6 0.5463
5 4 7.717 10 0.5512
6 5 11.050 15 0.5525
7 6 14.907 21 0.5521
8 7 19.282 28 0.5509
9 8 24.171 36 0.5493
10 9 29.571 45 0.5476
11 10 35.480 55 0.5458
12 11 41.897 66 0.5441
似乎平均值跟最近的时间相比最大值
编辑:一些额外的值
13 12 48.820 78 0.5424
14 13 56.248 91 0.5408
编辑 15的值
15 14 64.182 105 0.5393
编辑:选择更高的值
16 15 72.619 120 - 0.6052
32 31 275.942 496 - 0.5563
64 63 1034.772 1953 - 0.5294
128 127 4186.567 8128 - 0.5151
256 255 16569.876 32640 - 0.5077
我最近编写了一个程序,用于计算n值较高的插入排序的平均比较次数。从这些我得出的结论是,当n接近无穷大时,平均情况接近最坏情况除以2。
答案 1 :(得分:0)
大多数算法的平均情况与最坏情况相同。要知道为什么,让我们称O为最坏情况,Ω为最佳情况。据推测,当n变为无穷大时,O> =Ω。对于大多数分布,平均情况将接近最佳和最差情况的平均值 - 即(O +Ω)/ 2 = O / 2 +Ω/ 2。由于我们不关心系数,并且O> =Ω,因此与O相同。
显然,这是一种过于简单化的说法。存在倾斜的运行时间分布,使得平均情况的假设是最坏情况和最佳情况的平均值是无效的*。但这应该给你一个体面的直觉,为什么会这样。
*正如评论中的templatetypedef所提到的,一些例子是快速排序/快速选择,BST查找(除非你平衡树),哈希表查找和单纯形方法。