具有特殊属性的等级和等级排列

时间:2019-06-09 12:42:32

标签: arrays algorithm combinations permutation ranking

我要rank and unrank个具有特殊属性的排列。我怎样才能做到这一点?集合中排列的both属性是:

  1. 每个排列都有only 1 cycle
  2. 每个排列均由排列元素的子集组成,其中子集具有某些特殊顺序。

例如:

length 6 (N := 6)的置换具有以下置换元素:(1,2,3,4,5,6)及其子集:

子集S1 := (5,6)

子集S2 := (3,4)

子集S3 := (1,2)

其中元素为S1 > S2 > S3

因此,排列具有以下子集排序:L := (S3,S2,S1,S3,S2,S1)

在1个循环约束下,仅存在1个排列,它们满足了both个约束。

(5,4,2,6,3,1)

计数器示例:

(6,4,2,5,3,1)匹配第二个约束,但不匹配第一个约束。

我如何排名和取消满足both约束的排列。

当我有输入参数时:

N作为排列长度

K作为子集的数量

L作为包含置换元素的子集(Si)的列表,其中L定义了子集(Si)的顺序。

作为等级的输出参数,如果给出等级,是否排列等级?

我只能使用一个约束而不使用both约束对排列进行排名和取消排名。因此,排列的长度将大于100(N > 100)。not work将生成一个约束的所有排列,并对照另一个约束进行检查,以获取有效排列以进行排名/不排列。

0 个答案:

没有答案