Я хочу rank and unrank
перестановок со специальными свойствами.Как я могу это сделать?both
свойства перестановок в наборе:
- каждая перестановка имеет
only 1 cycle
- каждая перестановка состоит из подмножеств элементов перестановки, где подмножества находятся в некотором особом порядке.
Например:
Перестановки с 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)
соответствует второму ограничению, но не первому.
Как я могу ранжировать и отменять перестановки, которыеfullfill both
ограничений.
Когда у меня есть в качестве входных параметров:
N
как длина перестановки
K
как количество подмножеств
L
как список подмножеств (Si
), состоящий из элементов перестановки, где L
определяет порядок подмножеств (Si
).
И как выходной параметр Ранг или перестановка, если Рангдается?
Я могу ранжировать и отменять перестановки только с одним ограничением, но не с both
ограничениями.Таким образом, перестановки будут иметь длину больше 100 (N > 100
). not work
будет генерировать все перестановки одного ограничения и проверять их относительно другого, чтобы получить действительные перестановки для ранжирования / отмены.