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