我想按照给定长度的字典顺序对一个周期的排列进行排名和取消排名。
具有一个循环的排列是您可以在此循环中访问每个元素的位置。
p:= (2,3,1)
是一个循环的排列。排名1。
p:= (3,1,2)
也有 1 个循环,但等级为 2,因为排列在字典顺序上比第一个大,所以它的等级更高。
p:= (1,2,3)
是一个有3个循环的排列。(1),(2),(3)
如何按字典顺序有效排序(用一个周期进行排列)和未排序(rank + len 到用一个周期进行排列)?我不知道如何存档这个。
我发现了一个排名的解决方案。我们知道长度的排列n
has n-1
!一个循环的排列。由于这些知识,我们可以得出以下解决方案。
排名:示例2341
我们开始计算给出的 1 位置的排名(n-1[position])! as tempvalue
。然后我们计算指数2
这是 0,因为1
通过它掉出来创造了循环(1)。为了完成第一个位置的计算,我们需要乘以index
的元素与tempvalue
,这会导致 0temprank_0
。
现在我们继续这个步骤来添加剩余的位置temprank_0+temprank_1+temprank_2+temprank_4 = 0
取消排名:4
对于排列长度 4:
我们将排名划分为(n-2[postion+1])!
这导致2
这是索引1234
不会产生循环,因此排列的第 1 个位置是4
。然后我们减去2 times (n-2)!
from 4
。
我们继续这样两次。所以我们有412
。所以最后我们只添加剩余的值3
最后我们得到排列4123
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)