Меня интересует поиск перестановок p: S-> S в множестве S = {1, 2, ..., n}. В частности, все функции, которые либо переставляют i, либо j: p (i) = j и p (j) = i; или оставить их неизменными p (i) = i или p (j) = j.Сгенерировать все возможные функции перестановок
Например, если S = {1,2,3}, я должен получить что-то вроде:
p0 = [(1), (2), (3)] # p(1)=1, p(2)=2, p(3)=3
p1 = [(1,2), (3)] # p(1)=2, p(2)=1, p(3)=3
p2 = [(1,3), (2)]
p3 = [(2,3), (1)]
Если S = {1, 2, 3, 4}:
p0 = [(1), (2), (3), (4)]
p1 = [(1,2), (3,4)]
p2 = [(1,2), (3), (4)] # p(1)=2, p(2)=1, p(3)=3, p(4)=4
p3 = [(1,3), (2,4)]
p4 = [(1,3), (2), (4)]
p5 = [(1,4), (2,3)]
p6 = [(1,4), (2), (3)]
p7 = [(1), (3), (2,4)]
p8 = [(1), (4), (2,3)]
p9 = [(1), (2), (3,4)]
Спасибо.
Что вы пробовали? Вы четко осознаете «itertools», нетрудно использовать его для ваших строительных блоков, как только вы это осознаете. – ShadowRanger
Я не думаю, что должно быть так много downvotes, это не о * произвольных * перестановках, а скорее о специальном подмножестве. Эффективная реализация немного сложна. – Kh40tiK
@ Kh40tiK: Просить помощи, даже не делая попытку, на самом деле не в духе SO. – ShadowRanger