wygenerowanie wszystkich permutacji wyłączając cyklicznego obrotów
więc potrzeba algorytm w celu wygenerowania wszystkich permutacji listy numerów wyjątkiem obrotów cykliczne (np [1,2,3] == [2,3,1] == [3,1,2]).
Gdy istnieje co najmniej jeden unikalny numer w sekwencji, który jest dość prosty, wyjmij ten unikalny numer, wygeneruj wszystkie permutacje pozostałych liczb (ale z niewielką modyfikacją "standardowego" algorytmu permutacji) i dodaj unikalny numer z przodu.
do generowania permutacji odkryłem, że jest to konieczne, aby zmienić kod permutacji do:
def permutations(done, options)
permuts = []
seen = []
for each o in options
if o not in seen
seen.add(o)
permuts += permutations(done+o, options.remove(o))
return permuts
Tylko pomocą każdego unikalnego numeru w opcjach raz oznacza, że nie dostaniesz 322 razy.
Algorytm ten nadal generuje obroty, gdy nie ma żadnych unikatowych elementów, np. dla [1,1,2,2] wyniósłby [1,1,2,2], [1,2,2,1] i [1,2,1,2], a pierwsze dwa to rotacje cykliczne.
Czy istnieje skuteczny algorytm, który pozwoliłby mi generować wszystkie permutacje bez konieczności późniejszego usuwania cyklicznych obrotów?
Jeśli nie, jaki byłby najskuteczniejszy sposób na usunięcie cyklicznych obrotów?
UWAGA: To jest nie przy użyciu Python, ale raczej C++.
Czy nie jest to duplikat [generowania wszystkich unikalnych permutacji kołowych multiset] (http://stackoverflow.com/questions/3467914/is-there-an-algorithm-to-generate-all-unique-circular -permutacje-of-a-multiset)?Jest kilka dobrych odpowiedzi. – Kalin