【问题标题】:Maximum number of permutations最大排列数
【发布时间】:2019-02-26 04:10:57
【问题描述】:

一些排序算法,如插入排序,对于 n! n 个元素的可能排列,这意味着对于这些排列,对于某个常数 k,插入排序所做的比较次数为 kn。对于给定的常数 k,任何给定的比较排序可以在 kn 次比较中终止的最大排列数是多少?

【问题讨论】:

    标签: algorithm sorting runtime complexity-theory


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      每次比较最多会使您可以区分的输入排列的从不翻倍。因此,通过kn 比较,您最多可以对2^(kn) 排列进行排序。

      【讨论】:

        猜你喜欢
        • 2019-03-11
        • 2020-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-26
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        相关资源
        最近更新 更多