Перестановкою скінченної множини X {\displaystyle X} називається впорядкований набір без повторів із її елементів.
Перестановка — довільна бієкція π : X → X {\displaystyle \pi \colon X\to X} . Усього існує n ! {\displaystyle n!} (факторіал) різних перестановок, де n = | X | {\displaystyle n=|X|} — потужність множини (кількість елементів у ній).
Для зручності, перестановки розглядають над множиною { 1 , 2 , … , n } {\displaystyle \{1,2,\dots ,n\}} (будь-яку скінченну множину можна однозначно відобразити в цю множину).
Запис f = ( 1 2 3 4 5 6 7 8 9 10 2 5 10 4 3 7 1 9 8 6 ) {\displaystyle f={\begin{pmatrix}1&2&3&4&5&6&7&8&9&10\\2&5&10&4&3&7&1&9&8&6\end{pmatrix}}} означає, що f {\displaystyle f} — перестановка множини { 1 , 2 , … , 10 } {\displaystyle \{1,2,\dots ,10\}} і f ( 1 ) = 2 , f ( 2 ) = 5 , … , f ( 10 ) = 6 {\displaystyle f(1)=2,f(2)=5,\dots ,f(10)=6} (кожне число у верхньому рядку матриці переводиться у відповідне число в нижньому рядку).
Уживанішим у літературі є запис перестановки в один рядок (верхній рядок не пишеться):
Циклом перестановки π {\displaystyle \pi } називається така послідовність x 1 , x 2 , … , x n {\displaystyle x_{1},x_{2},\dots ,x_{n}} , що π ( x 1 ) = x 2 , π ( x 2 ) = x 3 , … , π ( x n − 1 ) = x n , π ( x n ) = x 1 . {\displaystyle \pi (x_{1})=x_{2},\pi (x_{2})=x_{3},\dots ,\pi (x_{n-1})=x_{n},\pi (x_{n})=x_{1}.}
Приклад:
Перестановка f = ( 1 2 3 4 5 6 7 8 9 10 2 5 10 4 3 7 1 9 8 6 ) {\displaystyle f={\begin{pmatrix}1&2&3&4&5&6&7&8&9&10\\2&5&10&4&3&7&1&9&8&6\end{pmatrix}}} має три цикли:
Циклічний запис перестановки — це запис через її цикли:
π = ( x 1 1 … x n 1 1 ) ( x 1 2 … x n 2 2 ) … ( x 1 m … x n m m ) {\displaystyle \pi ={\begin{pmatrix}x_{1}^{1}&\dots \;&x_{n_{1}}^{1}\end{pmatrix}}{\begin{pmatrix}x_{1}^{2}&\dots \;&x_{n_{2}}^{2}\end{pmatrix}}\dots \;{\begin{pmatrix}x_{1}^{m}&\dots \;&x_{n_{m}}^{m}\end{pmatrix}}}
Так для перестановки з прикладу справедливим є запис: f = ( 1 2 5 3 10 6 7 ) ( 4 ) ( 8 9 ) {\displaystyle f={\begin{pmatrix}1&2&5&3&10&6&7\end{pmatrix}}{\begin{pmatrix}4\end{pmatrix}}{\begin{pmatrix}8&9\end{pmatrix}}}
Перестановки скінченної множини X {\displaystyle \;X} утворюють групу щодо операції множення перестановок (композиції).
Нейтральним елементом в групі перестановок є тотожна перестановка E {\displaystyle \;E} , для якої виконується:
Тотожна перестановка переводить множину X {\displaystyle \;X} саму в себе.
Добуток перестановок — це послідовне виконання двох перестановок (композиція).
Якщо f , g {\displaystyle \;f,g} — перестановки, то:
Наприклад, нехай маємо A = ( a b c d e f c d a f b e ) , B = ( a b c d e f f e d c b a ) . {\displaystyle A={\begin{pmatrix}a&b&c&d&e&f\\c&d&a&f&b&e\end{pmatrix}},\quad \quad B={\begin{pmatrix}a&b&c&d&e&f\\f&e&d&c&b&a\end{pmatrix}}.}
Переставимо стовпці у B {\displaystyle B} , щоб її верхній ряд збігався із нижнім рядом A . {\displaystyle A.}
Кожна перестановка має обернену перестановку.
∀ {\displaystyle \forall } перестановки f , ∃ f − 1 {\displaystyle f,\;\exists \;f^{-1}} така що:
Наведений нижче алгоритм дозволяє послідовно отримати всі перестановки скінченної множини. Для зручності будемо вважати, що елементами множини є числа від 1 до n, що записані у масив A.
Кількість елементів, що розглядаються чи опрацьовуються на кроках 3 і 5 не перевищує кількість елементів, що переглядаються на кроці 2. На кроці 4 завжди виконується тільки одна операція обміну елементів. Отже, визначальною для складності алгоритму є кількість операцій на кроці 2. Вона залежить від поточного стану множини і може змінюватися від 1 до n − 1. Для визначення складності алгоритму достатньо оцінити середню кількість операцій на кроці 2.
Кількість перестановок для яких на кроці 2 буде переглядатись рівно k {\displaystyle \;k} елементів така — C n k + 1 ⋅ C k + 1 2 ⋅ ( n − k − 1 ) ! {\displaystyle C_{n}^{k+1}\cdot C_{k+1}^{2}\cdot (n-k-1)!} .
Середня кількість переглядів елементів на кроці 2 для всіх можливих перестановок: 1 n ! ∑ k = 1 n − 1 k ⋅ C n k + 1 ⋅ C k + 1 2 ⋅ ( n − k − 1 ) ! = {\displaystyle {\frac {1}{n!}}\sum _{k=1}^{n-1}k\cdot C_{n}^{k+1}\cdot C_{k+1}^{2}\cdot (n-k-1)!=}
= 1 n ! ∑ k = 1 n − 1 k ⋅ n ! ( k + 1 ) ! ( n − k − 1 ) ! ⋅ ( k + 1 ) ! 2 ⋅ ( k − 1 ) ! ⋅ ( n − k − 1 ) ! = 1 2 ∑ k = 0 n − 2 k + 1 k ! < 1 2 ∑ k = 0 ∞ k + 1 k ! = e < 3 {\displaystyle ={\frac {1}{n!}}\sum _{k=1}^{n-1}k\cdot {\frac {n!}{(k+1)!(n-k-1)!}}\cdot {\frac {(k+1)!}{2\cdot (k-1)!}}\cdot (n-k-1)!={\frac {1}{2}}\sum _{k=0}^{n-2}{\frac {k+1}{k!}}<{\frac {1}{2}}\sum _{k=0}^{\infty }{\frac {k+1}{k!}}=e<3}
Отже, в середньому на кроці 2 виконується менше ніж три перегляди елементів. Значить, такого ж порядку кількість операцій виконується на кроках 3 і 5. Звідси випливає, що отримання нової перестановки відбувається в середньому за константну кількість операцій O ( 1 ) {\displaystyle \;O(1)} , тоді складність алгоритму отримання всіх перестановок буде відповідно O ( n ! ) {\displaystyle \;O(n!)} .
Для прикладу отримаємо всі перестановки множини з трьох елементів, розглянемо стани масиву на початку п. 2, а також відповідні індекси i , j {\displaystyle \;i,j} :
Алгоритм послідовно отримав всі 6 можливих перестановок.
Коренем з перестановки π {\displaystyle \;\pi } називається така перестановка ψ {\displaystyle \;\psi } , що ψ 2 = π {\displaystyle \;\psi ^{2}=\pi } .
Справедливе наступне твердження: ∀ π {\displaystyle \forall \pi } — перестановка ∃ k ∈ N : π k = E {\displaystyle \exists k\in N:\pi ^{k}=E} . Звідси випливає, що π k + 1 = π {\displaystyle \;\pi ^{k+1}=\pi } . Якщо k + 1 {\displaystyle k+1\;} парне, то π k + 1 2 = ψ {\displaystyle \pi ^{\frac {k+1}{2}}=\psi } — корінь із перестановки.
k = H C K ( n 1 , n 2 , . . . , n l ) {\displaystyle \;k=HCK(n_{1},n_{2},...,n_{l})} , де НСК — найменше спільне кратне, а n i {\displaystyle \;n_{i}} — довжина i-го циклу в циклічному записі перестановки π {\displaystyle \;\pi } . Отже, якщо всі n i {\displaystyle \;n_{i}} непарні, то k — непарне, а k+1 — парне, і корінь з перестановки гарантовано існує (достатньо просто піднести початкову перестановку до відповідного степеня).
Цей розв'язок неприйнятний, якщо перестановка має цикли парної довжини. Але це не означає, що таки перестановки взагалі не мають коренів.
Корінь з перестановки існує тоді і тільки тоді, якщо ∀ k ∈ N {\displaystyle \forall k\in N} кількість циклів перестановки довжини 2 k {\displaystyle \;2k} — парна.
Спочатку доведемо необхідність умови. Припустимо існує корінь ψ , ψ 2 = π {\displaystyle \;\psi ,\psi ^{2}=\pi } . Розглянемо циклічне представлення цієї перестановки: ψ = ( x 1 1 , . . . , x l 1 1 ) . . . ( x 1 m , . . . , x l m m ) {\displaystyle \;\psi =(x_{1}^{1},...,x_{l_{1}}^{1})...(x_{1}^{m},...,x_{l_{m}}^{m})} .
Якщо i-й цикл ( x 1 , . . . , x l i ) {\displaystyle (x_{1},...,x_{l_{i}})\;} має непарну довжину, то при піднесенні перестановки до квадрата, він перейде в цикл ( x 1 , x 3 , . . . , x 2 t + 1 , . . . , x l i , x 2 , x 4 , . . . , x 2 p , . . . , x l i − 1 ) {\displaystyle (x_{1},x_{3},...,x_{2t+1},...,x_{l_{i}},x_{2},x_{4},...,x_{2p},...,x_{l_{i}-1})\;} — теж непарної довжини. Тобто якщо в перестановці якийсь елемент належав циклові непарної довжини, то і у квадраті цієї перестановки елемент буде належати циклові непарної довжини.
Якщо ж i-й цикл ( x 1 , . . . , x l i ) {\displaystyle (x_{1},...,x_{l_{i}})\;} має парну довжину, то при піднесенні перестановки до квадрата, він перейде у два цикли однакової довжини ( x 1 , x 3 , . . . , x 2 t + 1 , . . . , x l i − 1 ) {\displaystyle (x_{1},x_{3},...,x_{2t+1},...,x_{l_{i}-1})\;} і ( x 2 , x 4 , . . . , x 2 p , . . . , x l i ) {\displaystyle (x_{2},x_{4},...,x_{2p},...,x_{l_{i}})\;} .
Цикли парної довжини у квадраті перестановки могли утворитись тільки з циклів парної довжини. А отже, якщо є один цикл парної довжини, то обов'язково існує і інший такої самої довжини.
Доведення достатності випливає з алгоритму знаходження кореня.
Кожен із 4 кроків алгоритму може бути виконаний за час O ( n ) {\displaystyle O(n)\;} , отже загальна складність — O ( n ) {\displaystyle O(n)\;} .
Для прикладу знайдемо корінь з перестановки π = ( 1 2 3 4 5 6 7 3 4 1 7 6 5 2 ) {\displaystyle \;\pi ={\begin{pmatrix}1&2&3&4&5&6&7\\3&4&1&7&6&5&2\end{pmatrix}}}
Шукана перестановка виглядає так: ψ = ( 1 2 3 4 5 6 7 5 7 6 2 3 1 4 ) {\displaystyle \psi ={\begin{pmatrix}1&2&3&4&5&6&7\\5&7&6&2&3&1&4\end{pmatrix}}} , легко переконатись, що ψ 2 = π {\displaystyle \psi ^{2}=\pi \;} .
Наведений алгоритм знаходить тільки один корінь, в загальному ж випадку коренів може бути декілька.
Розглянемо n елементів m різних типів, причому в кожному типі всі елементи однакові. Тоді перестановки із всіх цих елементів з точністю до порядку розміщення однотипних елементів називаються перестановками з повторенням. Якщо ki — кількість елементів i-го типу, то k 1 + k 2 + ⋯ + k m = n {\displaystyle k_{1}+k_{2}+\dots +k_{m}=n} і кількість можливих перестановок з повтореннями дорівнює мультиноміальному коефіцієнту ( n k 1 , k 2 , … , k m ) = n ! k 1 ! k 2 ! … k m ! . {\displaystyle \textstyle {\binom {n}{k_{1},\ k_{2},\ \dots ,\ k_{m}}}={\frac {n!}{k_{1}!k_{2}!\dots k_{m}!}}.}