Я хочу систематически генерировать перестановки алфавита.Я не могу не хотеть использовать python itertools.permutation, потому что при создании списка каждой перестановки мой компьютер падает (в первый раз, когда я действительно заставил его завершить работу, это было довольно здорово).
ПоэтомуМой новый подход заключается в создании и тестировании каждого ключа на лету.В настоящее время я пытаюсь справиться с этим с помощью рекурсии.
Моя идея состоит в том, чтобы начать с самого большого списка (я буду использовать список из 3 элементов в качестве примера), переходить к меньшему списку, пока список не станет двумяэлементы длинные.Затем он распечатает список, поменяет последние два, снова напечатает список и вернется на один уровень вверх и повторите.
Например, для 123
123 (позиция обмена0 с позицией 0)
23 --> 123 (swap position 1 with position 1)
32 --> 132 (swap position 1 with position 2)
213 (позиция свопа 0 с позицией 1)
13 --> 213 (swap position 1 with position 1)
31 --> 231 (swap position 1 with position 2)
321 (позиция свопа 0 с позицией 2)
21 --> 321 (swap position 1 with position 1)
12 --> 312 (swap position 1 with position 2)
для четырехбуквенного числа (1234)
1234 (позиция обмена 0 с позицией 0)
234 (swap position 1 with position 1)
34 --> 1234
43 --> 1243
324 (swap position 1 with position 2)
24 --> 1324
42 --> 1342
432 (swap position 1 with position 3)
32 --> 1432
23 --> 1423
2134 (позиция замены 0 для позиции 1) 134 (свопположение 1 с положением 1) 34 -> 2134 43 -> 2143 314 (поменяйте положение 1 с положением 2) 14 -> 2314 41 -> 2341 431 (поменяйте положение 1 с положением 3) 31 -> 2431 13-> 2413
Это код, который у меня сейчас есть для рекурсии, но он вызывает у меня большое горе, рекурсия не является моей сильной стороной.Вот что у меня есть.
def perm(x, y, key):
print "Perm called: X=",x,", Y=",y,", key=",key
while (x<y):
print "\tLooping Inward"
print "\t", x," ",y," ", key
x=x+1
key=perm(x, y, key)
swap(x,y,key)
print "\tAfter 'swap':",x," ",y," ", key, "\n"
print "\nFull Depth Reached"
#print key, " SWAPPED:? ",swap(x,y,key)
print swap(x, y, key)
print " X=",x,", Y=",y,", key=",key
return key
def swap(x, y, key):
v=key[x]
key[x]=key[y]
key[y]=v
return key
Любая помощь будет принята с благодарностью, это действительно классный проект, и я не хочу отказываться от него.
Спасибо всем!Комментарии на мой метод или что-нибудь приветствуются.