2013-08-14 8 views
5

Czytam this proste i eleganckie rozwiązanie Pythona do znajdowania wszystkich permutacji danego ciągu znaków. Jest rekurencyjny. Na tej podstawie próbowałem zaimplementować rozwiązanie iteracyjne w pythonie.Iteracyjne rozwiązanie dla: - Znajdowania permutacji String

Poniżej znajduje się mój kod. Ale działa tylko dla 3-znakowych ciągów znaków :(Utknął próbując sprawdzić, w jaki sposób warunek bazowy rekurencji i warunek rekursji przekłada się na iteracyjny (nierekurencyjny). Wszystkie wskaźniki pomogłyby w stworzeniu działającego iteracyjnego rozwiązania. (Oparte na tym algorytmie lub dowolnym algorytmie inne)

def permutations_iter(word): 
while True: 
    perms = [] 
    result = [] 

    char = word[0] 
    new_word = word[1:] 

    if len(new_word)==2: 
     perms = [new_word,''.join(reversed(new_word))] 

    for perm in perms: 
     #insert the character into every possible location 
     for i in range(len(perm)+1): 
      result.append(perm[:i] + char + perm[i:]) 
    return result 

    if len(new_word)==2: 
     break; 


    #example code to call this iterative function   
    print permutations_iter("LSE") 

Odpowiedz

12

można przekonwertować każdy rekursji do iteracji z wykorzystaniem stosu. Ale w tym przypadku jest to jeszcze prostsze, ponieważ algorytm jest bardzo prosty.

def perms(word): 
    stack = list(word) 
    results = [stack.pop()] 
    while len(stack) != 0: 
     c = stack.pop() 
     new_results = [] 
     for w in results: 
      for i in range(len(w)+1): 
       new_results.append(w[:i] + c + w[i:]) 
     results = new_results 
    return results 

dla bardziej ogólnego nawrócenia rekursji do iteracja ze stosem odczytana this

+0

Dzięki za link, który wyjaśniłem i za rozwiązanie. – goldenmean

+0

excellent.elegant – user2290820

+0

idealne i zadbane! – deeshank