algorithm - 排列秩算法

标签 algorithm combinatorics

我正在努力寻找计算排列等级的有效算法,反之亦然(给定等级的排列)。有人可以指点一下吗?

最佳答案

数组中是否有重复元素?

如果只有独特的元素,下面的递归计算X[m:n]的等级作为长度n-m+1的排列:

Rank(X, m:n) = RankOfElement(X[m], X[m:n]) * Factorial(n - m) + Rank(X, (m+1):n)

RankRankOfElement 都是从零开始的(从 0 开始)。

基本上,Rank(permutation) = Rank(以排列的第一个字母开始的第一个排列) + Rank(删除第一个字母的排列),例如对于字符串 EDCBA,这意味着 Rank(EDCBA) = Rank(EABCD) + Rank(DCBA)

这可以通过更改第一项扩展到非唯一情况:

Rank(X, m:n) = Rank(X, (m+1):n) + ∑ over (y ∈ X[m:n], y < X[m]) of number of combinations of {X[m:n]}-{y} .

关于algorithm - 排列秩算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345704/

相关文章:

java - 快速排序分区功能

algorithm - N 个相同的球在 A 个不同的盒子中的组合

algorithm - 如何判断两个序列是否因排列不同?

algorithm - 在无向图中查找所有无弦循环

javascript - 给定一个数组,如何生成子集大小为 k 的所有组合?

c++ - 查找禁止字符串程序

algorithm - 如何计算包含一组字符的所有可能组合的排序列表中字符串值的索引?

c# - 根据日期范围和股票数量匹配买卖双方

algorithm - 找出算法的时间复杂度?

arrays - 最大化 A[i]*B[i] + A[i]*B[j] + A[j]*B[j], i != j,给定两个正整数的无序列表