算法功能
康拓展开用于解决:给定一个值为 1 1 1 ~ n n n的,数字互不重复的,且长度为 n n n的排序序列,康拓展开可以计算出 1 1 1 ~ n n n的全排列按照字典序排列,给定排列是第多少个。
算法公式
x = p 1 ⋅ ( n − 1 ) ! + p 2 ⋅ ( n − 2 ) ! + … + p n ⋅ 0 ! x=p_1 \cdot (n-1)!+p_{2} \cdot (n-2)!+\ldots+p_n \cdot 0! x=p1⋅(n−1)!+p2⋅(n−2)!+…+pn⋅0!
x x x指的是当前给定的排列序列, p i p_i pi指的是第 i + 1 i+1 i+1 ~ n n n个值中,比排列序列中第 i i i个值小的元素的数量。
算法过程
比如说有一个序列 52413 52413 52413。
首先先从 a 1 a_1 a1开始,值为 5 5 5,后面分别有 2 2 2、 4 4 4、 1 1 1、 3 3 3,都比 5 5 5小,所以 p 1 p_1 p1的值为 4 4 4,那么当前 x x x就是 4 ∗ 4 ! = 96 4*4!=96 4∗4!=96。
接着到了 a 2 a_2 a2,值为 2 2

最低0.47元/天 解锁文章
1055

被折叠的 条评论
为什么被折叠?



