Python poskytuje přímé metody k nalezení permutací a kombinací sekvence. Tyto metody jsou obsaženy v balíčku itertools.
Permutace
Nejprve importujte balíček itertools pro implementaci metody permutací v pythonu. Tato metoda bere jako vstup seznam a vrací objektový seznam n-tic, které obsahují všechny permutace ve formě seznamu.
Python3
# 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)> |
>
>
Výstup:
(1, 2, 3) (1, 3, 2) (2, 1, 3) (2, 3, 1) (3, 1, 2) (3, 2, 1)>
Časová složitost: O(n!), kde n je délka seznamu vstupů. Je to proto, že existuje n! permutace n prvků a program je všechny vygeneruje a vytiskne.
Pomocný prostor: O(n!), protože program potřebuje uložit všech n! permutace v paměti před jejich tiskem. Konkrétně proměnná perm vytvořená voláním permutací([1, 2, 3]) ukládá všech n! permutace v paměti jako seznam.
Generuje n! permutací, pokud je délka vstupní sekvence n.
Pokud chcete získat permutace délky L, implementujte to tímto způsobem.
negace diskrétní matematika
Python3
if příkaz java
# 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)> |
>
>
Výstup:
(1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2)>
Časová složitost tohoto programu je O(n^r), kde n je délka vstupního pole a r je délka permutací, které mají být generovány.
Prostorová složitost je také O(n^r), protože všechny permutace jsou před tiskem uloženy v paměti.
Generuje nCr * r! permutace, pokud je délka vstupní sekvence n a vstupní parametr je r.
Kombinace
Tato metoda bere jako vstup seznam a vstup r a vrací objektový seznam n-tic, které obsahují všechny možné kombinace délky r ve formě seznamu.
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)> |
multithreading v Javě
>
>
Výstup:
(1, 2) (1, 3) (2, 3)>
1. Kombinace jsou vydávány v lexikografickém řazení vstupu. Pokud je tedy vstupní seznam setříděn, kombinované n-tice budou vytvořeny v seřazeném pořadí.
Python3
# 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)> |
c++ rozdělení řetězce
>
>
Výstup:
(1, 2) (1, 3) (2, 3)>
2. Prvky jsou považovány za jedinečné na základě jejich polohy, nikoli hodnoty. Pokud jsou tedy vstupní prvky jedinečné, nebudou se v každé kombinaci opakovat žádné hodnoty.
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)> |
>
>
Výstup:
(2, 1) (2, 3) (1, 3)>
3. Pokud chceme vytvořit kombinaci stejného prvku se stejným prvkem, použijeme kombinace_s_náhradou.
Python3
bublinové řazení v Javě
# 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)> |
>
>
Výstup:
(1, 1) (1, 2) (1, 3) (2, 2) (2, 3) (3, 3)>