最大排列数

时间:2019-02-26 04:10:57

标签: algorithm sorting runtime complexity-theory

某些排序算法(例如插入排序)对于n的某些子集具有Θ(n)渐近运行时! n个元素的可能排列,这意味着对于这些排列,对于某些常数k,Insertion Sort的比较次数为kn。对于给定的常数k,在kn次比较中,任何给定的比较排序可以终止的最大排列数量是什么?

2 个答案:

答案 0 :(得分:1)

插入排序中的操作数取决于反转数。因此,我们需要评估n值的排列次数(为简便起见,1..n),其中包含准确的k求逆。

我们可以看到Inv(n, 0) = 1-排序后的数组
另外Inv(0, k) = 0-空数组

我们可以获得具有n个元素和k倒置的数组:
-将值n添加到具有n-1项和k反转的数组末尾(因此反转次数保持不变) 在具有n项和n-1倒置的数组末尾之前插入值k-1(因此添加一个倒置)
-在数组末尾的两个元素前插入值n,其中包含n-1个项目和k-2个反转(因此添加两个反转)
-依此类推

使用这种方法,我们可以按行和逐个单元格地填充表Inv[n][k]

  Inv[n][k] = Sum(Inv[n-1][i]) where j=0..k

答案 1 :(得分:0)

每个比较最多可以使您无法区分的输入排列加倍。因此,通过kn比较,您最多可以对2^(kn)个排列进行排序。