Python giver direkte metoder til at finde permutationer og kombinationer af en sekvens. Disse metoder er til stede i itertools-pakken.
Permutation
Importer først itertools-pakken for at implementere permutationsmetoden i python. Denne metode tager en liste som input og returnerer en objektliste over tupler, der indeholder alle permutationer i en listeform.
Python3
lort
# A Python program to print all> # permutations using library function> from> itertools>import> permutations> # Get all permutations of [1, 2, 3]> perm>=> permutations([>1>,>2>,>3>])> # Print the obtained permutations> for> i>in> list>(perm):> >print> (i)> |
>
>
Produktion:
(1, 2, 3) (1, 3, 2) (2, 1, 3) (2, 3, 1) (3, 1, 2) (3, 2, 1)>
Tidskompleksitet: O(n!), hvor n er længden af inputlisten. Dette er fordi der er n! permutationer af n elementer, og programmet genererer og udskriver dem alle.
Hjælpeplads: O(n!), da programmet skal gemme alle n! permutationer i hukommelsen, før de udskrives. Specifikt gemmer den perm-variabel, der er oprettet ved at kalde permutationer([1, 2, 3]), alle n! permutationer i hukommelsen som en liste.
Det genererer n! permutationer, hvis længden af inputsekvensen er n.
Hvis du ønsker at få permutationer af længde L, så implementer det på denne måde.
Python3
# A Python program to print all> # permutations of given length> from> itertools>import> permutations> # Get all permutations of length 2> # and length 2> perm>=> permutations([>1>,>2>,>3>],>2>)> # Print the obtained permutations> for> i>in> list>(perm):> >print> (i)> |
>
>
Produktion:
(1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2)>
Tidskompleksiteten af dette program er O(n^r), hvor n er længden af input-arrayet, og r er længden af de permutationer, der skal genereres.
Rumkompleksiteten er også O(n^r), da alle permutationer gemmes i hukommelsen før udskrivning.
Det genererer nCr * r! permutationer, hvis længden af inputsekvensen er n og inputparameteren er r.
Kombination
Denne metode tager en liste og en input r som input og returnerer en objektliste af tupler, som indeholder alle mulige kombinationer af længde r i en listeform.
Python3
# A Python program to print all> # combinations of given length> from> itertools>import> combinations> # Get all combinations of [1, 2, 3]> # and length 2> comb>=> combinations([>1>,>2>,>3>],>2>)> # Print the obtained combinations> for> i>in> list>(comb):> >print> (i)> |
>
>
Produktion:
(1, 2) (1, 3) (2, 3)>
1. Kombinationer udsendes i leksikografisk sorteringsrækkefølge efter input. Så hvis inputlisten er sorteret, vil kombinationstuplerne blive produceret i sorteret rækkefølge.
Python3
smide kast i java
# A Python program to print all> # combinations of a given length> from> itertools>import> combinations> # Get all combinations of [1, 2, 3]> # and length 2> comb>=> combinations([>1>,>2>,>3>],>2>)> # Print the obtained combinations> for> i>in> list>(comb):> >print> (i)> |
>
>
Produktion:
(1, 2) (1, 3) (2, 3)>
2. Elementer behandles som unikke baseret på deres position, ikke på deres værdi. Så hvis input-elementerne er unikke, vil der ikke være nogen gentagelsesværdier i hver kombination.
Python3
# A Python program to print all combinations> # of given length with unsorted input.> from> itertools>import> combinations> # Get all combinations of [2, 1, 3]> # and length 2> comb>=> combinations([>2>,>1>,>3>],>2>)> # Print the obtained combinations> for> i>in> list>(comb):> >print> (i)> |
kamelhylster python
>
>
Produktion:
(2, 1) (2, 3) (1, 3)>
3. Hvis vi vil lave en kombination af det samme element til det samme element, så bruger vi kombinationer_med_erstatning.
Python3
# A Python program to print all combinations> # with an element-to-itself combination is> # also included> from> itertools>import> combinations_with_replacement> # Get all combinations of [1, 2, 3] and length 2> comb>=> combinations_with_replacement([>1>,>2>,>3>],>2>)> # Print the obtained combinations> for> i>in> list>(comb):> >print> (i)> |
>
>
Produktion:
(1, 1) (1, 2) (1, 3) (2, 2) (2, 3) (3, 3)>