为什么在平均情况下插入排序Θ(n ^ 2)?

时间:2013-06-11 23:12:36

标签: algorithm sorting big-o insertion-sort

Insertion sort的运行时为Ω(n)(当输入被排序时)和O(n 2 )(当输入被反向排序时)。平均而言,它以Θ(n 2 )的时间运行。

这是为什么?例如,为什么平均情况不接近O(n log n)?

2 个答案:

答案 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查找(除非你平衡树),哈希表查找和单纯形方法。