Изменения

Перейти к: навигация, поиск
Небольшие фиксы
{{Определение
|definition=
'''Умножением''' (англ. ''multiplication'') или '''композицией''' (англ. ''composition'') перестановок,представленных в виде целочисленных функций <tex> a_i </tex>, где <tex>i - </tex> позиция элемента, а <tex> a_i </tex> — его номер, называется перестановка, получаемая по следующему правилу:
<tex> (ab)_i = a_{b_i} </tex>
}}
 
Иногда применяется обратная формулировка, то есть: <tex> (ab)_i = b_{a_i} </tex>
{{Утверждение
}}
 
Перед прочтением примера перемножения перестановок рекомендуем познакомиться с циклами в данной статье: [[Действие перестановки на набор из элементов, представление в виде циклов]]
===Пример===
<tex> ab = (1, 2, 5)(3, 6, 4)(1, 4, 6, 5) = (1, 3, 6, 5)(2)(4) = (1, 3, 6, 5) </tex>
 
Циклы подробно рассматриваются здесь: [[Действие перестановки на набор из элементов, представление в виде циклов]]
==Обратная перестановка==
|definition=
'''Обратной перестановкой''' (англ. ''an inverse permutation'') <tex> a^{-1} </tex> к перестановке <tex> a </tex> называется такая перестановка, что:
<tex> (a^{-1}a)_i = (aa^{-1})_i = i </tex>
{{Утверждение
|statement=
Для каждой перестановки существует перестановка, обратная ей.
|proof=
Пусть дана перестановка <tex> a </tex>, построим обратную ей перестановку <tex> a^{-1}</tex>: если <tex> a_x = y </tex>, то <tex> a^{-1}_y = x </tex>. Очевидно, что данная перестановка является обратной к <tex> a </tex>.
}}
 
Также обратная перестановка единственна. Это следует из того, что для каждой <tex> i </tex>-ой позиций в исходной перестановке однозначно определяется <tex> j </tex>-ая позиций в обратной перестановке, значение которой есть <tex> i </tex>
{{Определение
===Получение обратной перестановки===
Пусть в массиве <tex>p[i]</tex> содержится перестановка, длины <tex> n </tex>, тогда после выполнения алгоритма в массиве <tex>rep[i]</tex>, после выполнения алгоритма, будет содержаться перестановка, обратная перестановкаей.
'''fun''' reversePerm(p : '''int[]''', rep : '''int[]''')
'''int''' n = p.size; '''for''' i = 0 1 '''to''' n '''for''' j = 0 '''to''' n '''if''' p[j] == i + 1 rep[i] = j + 1; При представлении перестановки в виде циклов обратную перестановку можно легко получить, инвертировав все ребра в циклах. <tex> a = (1, 3, 2), (4, 5) \Rightarrow a^{-1} = (1, 2, 3), (4, 5) </tex> Отсюда следует более эффективный алгоритм, где <tex> visited[] </tex> - массив посещённых элементов: '''fun''' reversePerm (visited : '''boolean[]''', p : '''int[]''', rep : '''int[]''') '''int''' n = p.size; '''for''' i = 0 '''to''' n '''if''' visited[i] '''continue'''; ''<font color="green">// инвертировать цикл, начинающийся в позиции <tex> i </tex> </font>'' '''int''' last = i; '''int''' j = p[i]; '''while''' '''true''' '''int''' next = p[j]; p[j] = last; visited[j] = '''true'''; '''if''' j == i '''break'''; last = j; j = next;
==Группа перестановок==
15
правок

Навигация