【发布时间】:2020-05-22 08:40:46
【问题描述】:
【问题讨论】:
-
链接失效
-
它托管在谷歌图书上,所以也许你很遗憾需要一个谷歌帐户来查看它:-/
【问题讨论】:
排名/取消排名
排列的特定排名将整数与一组不同项的所有排列的特定顺序相关联。出于我们的目的,排名会将整数 0..(n!-1) 分配给整数 0..(n-1) 的所有排列的排序。
Rank({2, 1, 0, 3}) = 17
Unranking是逆过程:给定一个秩r获得排列。
Unrank(17) = {2, 1, 0, 3}
因此,rank和unrank函数必须互为逆,即存在一个bijection。
permutation p = Unrank(Rank(p), n)
例如,按字典顺序排列的数字 0 到 3 的排列顺序如下:
PERMUTATION RANK
(0, 1, 2, 3) -> 0
(0, 1, 3, 2) -> 1
(0, 2, 1, 3) -> 2
(0, 2, 3, 1) -> 3
(0, 3, 1, 2) -> 4
(0, 3, 2, 1) -> 5
(1, 0, 2, 3) -> 6
(1, 0, 3, 2) -> 7
(1, 2, 0, 3) -> 8
(1, 2, 3, 0) -> 9
(1, 3, 0, 2) -> 10
(1, 3, 2, 0) -> 11
(2, 0, 1, 3) -> 12
(2, 0, 3, 1) -> 13
(2, 1, 0, 3) -> 14
(2, 1, 3, 0) -> 15
(2, 3, 0, 1) -> 16
(2, 3, 1, 0) -> 17
(3, 0, 1, 2) -> 18
(3, 0, 2, 1) -> 19
(3, 1, 0, 2) -> 20
(3, 1, 2, 0) -> 21
(3, 2, 0, 1) -> 22
(3, 2, 1, 0) -> 23
增量变化
增量更改方法通过定义下一个和上一个操作来将一个排列转换为另一个排列,通常通过交换两个元素来工作。棘手的部分是安排交换,以便在生成所有交换之前不会重复排列。下面的输出图片使用连续排列之间的单次交换给出了 {1,2,3} 的六个排列的排序。
参考文献
https://rosettacode.org/wiki/Permutations/Rank_of_a_permutation https://en.wikipedia.org/wiki/Factorial_number_system#Permutations https://computationalcombinatorics.wordpress.com/2012/09/10/ranking-and-unranking-of-combinations-and-permutations/
【讨论】: