Data una lista qualsiasi visualizza tutte le liste permutazioni: Pn=n!
def scambia(lista, p1, p2): temp =lista[p1] lista[p1]=lista[p2] lista[p2]=temp def permuta(lista, pos, n): if(pos == n): print(lista,end="\t") else: for k in range(pos, n): scambia(lista,pos, k) permuta(lista, pos+1, n) scambia(lista,pos, k) LISTA=[1,2,3,4] permuta(LISTA, 0, len(LISTA))
Parola
Data una certa parola si ottengono tutti gli anagrammi
Si utilizzano le funzioni
list(...)
str().join(...)
def scambia(lista, p1, p2): temp =lista[p1] lista[p1]=lista[p2] lista[p2]=temp def permuta(lista, pos, n): if(pos == n): print(str().join(lista), end="\t") else: for k in range(pos, n): scambia(lista,pos, k) permuta(lista,pos+1, n) scambia(lista,pos, k) PAROLA="amor" permuta(list(PAROLA), 0, len(PAROLA))
Le parole non sono in ordine alfabetico
L’elenco può essere ordinato
def scambia(lista, p1, p2): temp =lista[p1] lista[p1]=lista[p2] lista[p2]=temp def permuta(lista, pos, n, elenco): if(pos == n): parola=str().join(lista) print(parola, end="\t") elenco.append(parola) else: for k in range(pos, n): scambia(lista,pos, k) permuta(lista, pos+1, n, elenco) scambia(lista,pos, k) PAROLA = "amor" ELENCO = [] permuta(list(PAROLA), 0, len(PAROLA), ELENCO) ELENCO.sort() print("\n") for parola in ELENCO: print(parola, end="\t")
Senza ripetizioni
Se ci sono lettere ripetute alcune parole si ripeteranno più volte.
La sequenza di tipo set elimina le ripetizioni.
def scambia(lista, p1, p2): temp =lista[p1] lista[p1]=lista[p2] lista[p2]=temp def permuta(lista, pos, n, elenco): if(pos == n): parola=str().join(lista) print(parola, end="\t") elenco.add(parola) else: for k in range(pos, n): scambia(lista,pos, k) permuta(lista, pos+1, n, elenco) scambia(lista,pos, k) PAROLA="amar" ELENCO=set() permuta(list(PAROLA), 0, len(PAROLA), ELENCO) ELENCO2=list(ELENCO) ELENCO2.sort() print("\n") for parola in ELENCO2: print(parola, end="\t")