Действие перестановки на набор из элементов, представление в виде циклов — различия между версиями
Строка 1: | Строка 1: | ||
+ | |||
__TOC__ | __TOC__ | ||
== Действие перестановки на набор элементов == | == Действие перестановки на набор элементов == | ||
Строка 4: | Строка 5: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | Пусть <tex>\pi</tex> {{---}} перестановка | + | Пусть <tex>\pi</tex> {{---}} перестановка из <tex>n</tex> элементов, и <tex>\{a_i\}</tex> {{---}} множество некоторых объектов, занумерованных числами от <tex>1</tex> до <tex>n</tex>. Тогда '''результатом действия перестановки''' на этот набор объектов назовём множество объектов <tex>\{b_i\}</tex>, занумерованных числами от одного до <tex>n</tex>, причём <tex>b_i = a_{\pi_i}</tex>. |
}} | }} | ||
− | [[ | + | Обозначим за <tex>A</tex> множество (не пронумерованных) объектов <tex>\{a_1, \dots, a_n\}</tex>. Поскольку перестановку можно рассматривать как отображение <tex>\pi \colon \{1, \dots, n\} \to \{a_1, \dots, a_n\}</tex>, а нумерацию как отображение <tex>\alpha \colon \{1, \dots, n\} \to A</tex>, то [[Действие_группы_на_множестве|действие перестановки]] можно определить как композицию отображений <tex>\alpha \circ \pi</tex>. |
− | + | Например, рассмотрим множество <tex>A = (a, b, c, d)</tex> и перестановку <tex>\pi = \langle 3, 4, 1, 2 \rangle</tex>. Тогда результат действия <tex>\pi</tex> на <tex>A</tex> {{---}} упорядоченное множество <tex>\pi(A) = (c, d, a, b)</tex>. Если рассмотреть [[Основные_определения_теории_графов|граф]] перестановки (описано ниже), то действие перестановки можно представить таким образом: каждый элемент устанавливается в вершину графа, соответствующую номеру этого элемента, после чего каждый элемент передвигается по исходящему из этой вершины ребру. | |
− | + | [[Файл:Permutation_action.png|400px|frame|center|Иллюстрация действия перестановки]] | |
Также, композицию перестановок можно выразить как действие одной перестановки на другую. | Также, композицию перестановок можно выразить как действие одной перестановки на другую. | ||
− | |||
Стоит отметить, что действие перестановки <tex>\pi^n</tex> соответствует переходу по графу <tex>n</tex> раз. | Стоит отметить, что действие перестановки <tex>\pi^n</tex> соответствует переходу по графу <tex>n</tex> раз. | ||
Строка 26: | Строка 26: | ||
==Циклы== | ==Циклы== | ||
− | + | {{Определение | |
− | Циклом длины <tex>~l</tex> называется такая перестановка <tex>\pi,</tex> которая тождественна на всём множестве <tex>X,</tex> кроме подмножества <tex>\{x_1,x_2,\dots,x_l\}\subset X</tex> и <tex>\pi(x_l)=x_1</tex>, <tex>\pi(x_i)=x_{i+1} | + | |definition= |
− | + | '''Циклом''' длины <tex>~l</tex> называется такая перестановка <tex>\pi,</tex> которая тождественна на всём множестве <tex>X,</tex> кроме подмножества <tex>\{x_1,x_2,\dots,x_l\}\subset X</tex> и <tex>\pi(x_l)=x_1</tex>, <tex>\pi(x_i)=x_{i+1}</tex>. Обозначается <tex>(x_1,x_2,\dots,x_l)</tex>. | |
− | + | }} | |
+ | [[Файл:cycles.gif|150px|right|frame|Изображение перестановки в виде графа]] | ||
+ | Перестановку можно записать в виде произведения непересекающихся циклов, причём единственным образом с точностью до порядка следования циклов в произведении. Например: <tex>(1, 5, 2)(3, 6)(4)=\langle 5,1,6,4,2,3\rangle </tex>. | ||
+ | Цикл может быть записан по разному, например, в приведенном выше примере цикл <tex>(1, 5, 2)</tex> может быть записан как <tex>(5, 2, 1)</tex>, <tex>(2, 1, 5)</tex>, но не может быть записан как <tex>(2, 5, 1)</tex>. | ||
+ | Перестановку можно представить в виде [[Основные_определения_теории_графов|графа]]. Граф содержит ребро от вершины <tex>x_i</tex> к вершине <tex>x_j</tex> если <tex>\pi(x_i) = x_j</tex>. Тогда циклы перестановки соответствуют циклическим путям в графе. | ||
С циклами связаны некоторые интересные свойства перестановок. | С циклами связаны некоторые интересные свойства перестановок. | ||
{{Определение | {{Определение | ||
− | |||
|definition='''Степенью перестановки''' называется минимальное число <tex>n \in N</tex> такое, что <tex>\pi^n = i</tex>}} | |definition='''Степенью перестановки''' называется минимальное число <tex>n \in N</tex> такое, что <tex>\pi^n = i</tex>}} | ||
− | |||
− | |||
− | |||
− | |||
{{Утверждение | {{Утверждение | ||
Строка 46: | Строка 45: | ||
Степень перестановки равна наименьшему общему кратному длин всех циклов | Степень перестановки равна наименьшему общему кратному длин всех циклов | ||
|proof= | |proof= | ||
− | Пусть <tex>k</tex> — степень перестановки. Граф перестановки разбит на циклы, и для того, чтобы какой-то элемент прошёл по своему циклу один раз, нужно возвести перестановку в степень <tex>l</tex>, где <tex>l</tex> — длина цикла. Если элемент проходит цикл несколько раз и возвращается на своё место, то можно сделать вывод о том, что перестановка возводится в степень кратную <tex>l</tex>. Тогда только в том случае, когда <tex>k</tex> делится на длины всех циклов, все элементы вернутся на свои места, а наименьшее такое <tex>k</tex> — это НОК длин всех циклов. | + | Пусть <tex>k</tex> — степень перестановки. Граф перестановки разбит на циклы, и для того, чтобы какой-то элемент прошёл по своему циклу один раз, нужно возвести перестановку в степень <tex>l</tex>, где <tex>l</tex> — длина цикла. Если элемент проходит цикл несколько раз и возвращается на своё место, то можно сделать вывод о том, что перестановка возводится в степень кратную <tex>l</tex>. Тогда только в том случае, когда <tex>k</tex> делится на длины всех циклов, все элементы вернутся на свои места, а наименьшее такое <tex>k</tex> — это НОК длин всех циклов. }} |
− | }} | ||
− | |||
Строка 55: | Строка 52: | ||
Если длины всех циклов не превышают <tex>2</tex>, то перестановка является [[Умножение_перестановок,_обратная_перестановка,_группа_перестановок#def_involution | инволюцией]]. | Если длины всех циклов не превышают <tex>2</tex>, то перестановка является [[Умножение_перестановок,_обратная_перестановка,_группа_перестановок#def_involution | инволюцией]]. | ||
|proof= | |proof= | ||
− | Действительно, в таком случае по вышеупомянутому <tex>\pi^2 = i</tex>. Домножив на <tex>\pi^{-1}</tex> получим <tex>\pi^{-1} = \pi</tex>. | + | Действительно, в таком случае по вышеупомянутому <tex>\pi^2 = i</tex>. Домножив на <tex>\pi^{-1}</tex> получим <tex>\pi^{-1} = \pi</tex>. }} |
− | }} | ||
==Поиск всех циклов в перестановке== | ==Поиск всех циклов в перестановке== | ||
{{Задача | {{Задача | ||
− | |definition=Дана перестановка <tex>\pi</tex> | + | |definition=Дана перестановка <tex>\pi</tex> из <tex>n</tex> элементов, требуется найти все циклы в ней. }} |
Рассмотрим элемент перестановки <tex>\pi_i</tex>. Добавим его к циклу, отметим позицию <tex>i</tex> посещенной и перейдем к <tex>\pi_{\pi_i}</tex>. Если мы перешли в позицию <tex>i</tex>, которую уже посещали, значит мы нашли очередной цикл перестановки. Перейдем к первой непосещенной позиции и продолжим поиск. | Рассмотрим элемент перестановки <tex>\pi_i</tex>. Добавим его к циклу, отметим позицию <tex>i</tex> посещенной и перейдем к <tex>\pi_{\pi_i}</tex>. Если мы перешли в позицию <tex>i</tex>, которую уже посещали, значит мы нашли очередной цикл перестановки. Перейдем к первой непосещенной позиции и продолжим поиск. | ||
Строка 72: | Строка 68: | ||
<code> | <code> | ||
+ | '''function''' findCycles('''int''' p[]) | ||
'''vector<bool>''' used(n) ''<font color="green">// массив, где отмечены посещенные позиции</font>'' | '''vector<bool>''' used(n) ''<font color="green">// массив, где отмечены посещенные позиции</font>'' | ||
Строка 84: | Строка 81: | ||
'''print''' cycle ''<font color="green">// распечатаем очередной цикл перестановки</font>'' | '''print''' cycle ''<font color="green">// распечатаем очередной цикл перестановки</font>'' | ||
</code> | </code> | ||
− | |||
==См. также== | ==См. также== | ||
− | *[[ | + | *[[Теорема Кэли]] |
== Источники == | == Источники == |
Версия 02:53, 4 января 2015
Содержание
Действие перестановки на набор элементов
Определение: |
Пусть | — перестановка из элементов, и — множество некоторых объектов, занумерованных числами от до . Тогда результатом действия перестановки на этот набор объектов назовём множество объектов , занумерованных числами от одного до , причём .
Обозначим за множество (не пронумерованных) объектов . Поскольку перестановку можно рассматривать как отображение , а нумерацию как отображение , то действие перестановки можно определить как композицию отображений .
Например, рассмотрим множество граф перестановки (описано ниже), то действие перестановки можно представить таким образом: каждый элемент устанавливается в вершину графа, соответствующую номеру этого элемента, после чего каждый элемент передвигается по исходящему из этой вершины ребру.
и перестановку . Тогда результат действия на — упорядоченное множество . Если рассмотретьТакже, композицию перестановок можно выразить как действие одной перестановки на другую. Стоит отметить, что действие перестановки
соответствует переходу по графу раз.Действие обратной перестановки над множеством
соответствует переходу элементов по развёрнутым рёбрам и даёт упорядоченное множество , для которого верно .Утверждение: |
Если , то ; |
Поскольку | можно представить как , то
Циклы
Определение: |
Циклом длины | называется такая перестановка которая тождественна на всём множестве кроме подмножества и , . Обозначается .
Перестановку можно записать в виде произведения непересекающихся циклов, причём единственным образом с точностью до порядка следования циклов в произведении. Например:
.Цикл может быть записан по разному, например, в приведенном выше примере цикл
может быть записан как , , но не может быть записан как .Перестановку можно представить в виде графа. Граф содержит ребро от вершины к вершине если . Тогда циклы перестановки соответствуют циклическим путям в графе.
С циклами связаны некоторые интересные свойства перестановок.
Определение: |
Степенью перестановки называется минимальное число | такое, что
Утверждение: |
Степень перестановки равна наименьшему общему кратному длин всех циклов |
Пусть | — степень перестановки. Граф перестановки разбит на циклы, и для того, чтобы какой-то элемент прошёл по своему циклу один раз, нужно возвести перестановку в степень , где — длина цикла. Если элемент проходит цикл несколько раз и возвращается на своё место, то можно сделать вывод о том, что перестановка возводится в степень кратную . Тогда только в том случае, когда делится на длины всех циклов, все элементы вернутся на свои места, а наименьшее такое — это НОК длин всех циклов.
Утверждение: |
Если длины всех циклов не превышают инволюцией. , то перестановка является |
Действительно, в таком случае по вышеупомянутому | . Домножив на получим .
Поиск всех циклов в перестановке
Задача: |
Дана перестановка | из элементов, требуется найти все циклы в ней.
Рассмотрим элемент перестановки
. Добавим его к циклу, отметим позицию посещенной и перейдем к . Если мы перешли в позицию , которую уже посещали, значит мы нашли очередной цикл перестановки. Перейдем к первой непосещенной позиции и продолжим поиск.Рассмотрим в качестве примера поиск циклов в перестановке
:- В позиции находится число . Добавим его к новому циклу и перейдем в позицию . Аналогично добавим к циклу числа и . Перейдем в позицию , которую мы уже посещали — нашли первый цикл .
- Аналогично найдем второй цикл .
- Таким образом,
Псевдокод алгоритма
function findCycles(int p[]) vector<bool> used(n) // массив, где отмечены посещенные позиции for i = 1 to n if not used[i] j = i vector<int> cycle while not used[j] cycle.push_back(p[j]) used[j] = true j = p[j] print cycle // распечатаем очередной цикл перестановки