Задача об ожерельях — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Теорема Пойа)
Строка 4: Строка 4:
  
  
Решение этой задачи опирается на лемму Бернсайда и теорему Пойа.
+
Решение этой задачи опирается на * [http://neerc.ifmo.ru/wiki/index.php?title=Лемма_Бёрнсайда_и_Теорема_Пойа Лемму Бёрнсайда и Теорему Пойа].
  
  
Строка 16: Строка 16:
 
|definition=
 
|definition=
 
'''Неподвижной точкой''' <tex>f</tex>  для перестановки  называется такой элемент, который инвариантен относительно этой перестановки.
 
'''Неподвижной точкой''' <tex>f</tex>  для перестановки  называется такой элемент, который инвариантен относительно этой перестановки.
}}
 
== Лемма Бернсайда ==
 
 
{{Лемма
 
|id=lemmaBerns.
 
|author=Бернсайд
 
|statement=Количество комбинаторных объектов равно сумме количеств неподвижных точек по всем перестановкам из группы <tex>G</tex> , делённой на размер этой группы:
 
 
<tex> C = </tex> <tex  dpi = "180">\frac{1} {|G|}</tex><tex>\sum\limits_{k \in G}I(k)</tex>.  Где <tex>I(k)</tex> {{---}} количество неподвижных точек для перестановки <tex>k</tex>.
 
|proof=
 
Рассмотрим сумму в числителе дроби справа:
 
<tex>\sum\limits_{k \in G}I(k)</tex> {{---}} это ничто иное как количество "инвариантных пар". Очевидно, что в формуле мы имеем право изменить порядок суммирования - сделать внешнюю сумму по элементам множества <tex>f</tex>, а внутри нее поставить величину <tex>J(f)</tex> {{---}} количество перестановок, относительно которых объект <tex>f</tex> инвариантен:
 
 
 
<tex >C =</tex> <tex dpi = "180"> \frac{1} {|G|}</tex><tex>\sum\limits_{f} J(f)</tex>
 
 
 
Для доказательства этой формулы составим таблицу, столбцы которой будут подписаны всеми значениями <tex>f_i</tex>, строки {{---}} всеми перестановками <tex>k_j</tex>, а в клетках таблицы будут стоять их произведения . Тогда, если мы будем рассматривать столбцы этой таблицы как множества, то некоторые из них могут совпасть, и это будет означать, что соответствующие этим столбцам <tex>f</tex> также эквивалентны. Таким образом, количество различных как множество столбцов равно количеству различных комбинаторных объектов.
 
 
 
Столбцы таблицы сами распадаются на комбинаторные обекты; зафиксируем теперь какой-либо объект и рассмотрим столбцы в нём. Во-первых, заметим, что в этих столбцах могут стоять только элементы <tex>f_i</tex> одного объекта (иначе получилось бы, что некоторым эквивалентным преобразованием  мы перешли в другой комбинаторный объект, что невозможно). Во-вторых, каждый элемент <tex>f_i</tex> будет встречаться одинаковое число раз во всех столбцах (это также следует из того, что столбцы соответствуют эквивалентным элементам). Отсюда можно сделать вывод, что все столбцы внутри одного комбинаторного объекта совпадают друг с другом как мультимножества.
 
 
Теперь зафиксируем произвольный элемент <tex>f</tex>. С одной стороны, он встречается в своём столбце ровно <tex>J(f)</tex> раз (по самому определению). С другой стороны, все столбцы внутри одного комбинаторного объекта одинаковы как мультимножества. Следовательно, внутри каждого столбца данного комбинаторного объекта любой элемент <tex>g</tex> встречается ровно <tex>J(g)</tex> раз.
 
 
Таким образом, если мы возьмём произвольным образом от каждого класса эквивалентности по одному столбцу и просуммируем количество элементов в них, то получим, с одной стороны, <tex>C|G|</tex> (это получается, просто умножив количество столбцов на их размер), а с другой стороны {{---}} сумму величин <tex>J(f)</tex> по всем <tex>f</tex>(это следует из всех предыдущих рассуждений):
 
<tex> C =</tex> <tex  dpi = "180"> \frac{1} {|G|}</tex><tex>\sum\limits_{f} J(f)</tex>
 
}}
 
 
== Теорема Пойа ==
 
{{Теорема
 
|id=teorPo.
 
|author=Пойа
 
|statement= <tex> C =</tex> <tex dpi = "180"> \frac{1} {|G|}</tex><tex>\sum\limits_{k \in G} l^{P(k)}</tex>  ,где <tex>C</tex> {{---}} кол-во различных комбинаторных объектов, <tex>P(k)</tex> - кол-во циклов в перестановке <tex>k</tex>, <tex>l</tex> {{---}} кол-во различных состояний одного элемента.
 
|proof=Для доказательства этой теорем достаточно установить следующее равенство
 
<tex>I(k) = l^{P(k)}</tex>
 
 
 
Рассмотрим некоторую перестановку <tex>k</tex> и некоторый элемент <tex>f</tex>. Под действием перестановки <tex>k</tex> элементы <tex>f</tex> передвигаются, как известно, по циклам перестановки. Заметим, что внутри каждого цикла перестановки должны находиться одинаковые элементы <tex>f</tex>. В то же время, для разных циклов никакой связи между значениями элементов не возникает. Таким образом, для каждого цикла перестановки <tex>k</tex> мы выбираем по одному значению, и, тем самым, мы получим все представления <tex>f</tex>, инвариантные относительно этой перестановки, т.е.:
 
<tex>I(k) = l^{P(k)}</tex>
 
 
}}
 
}}
  
Строка 75: Строка 36:
  
  
==Cсылки==
+
== См. также ==
*[http://e-maxx.ru/algo/necklace_colouring Ожерелья]
+
* [http://neerc.ifmo.ru/wiki/index.php?title=Лемма_Бёрнсайда_и_Теорема_Пойа Лемма Бёрнсайда и Теорема Пойа]
  
  
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Комбинаторика]]
 
[[Категория: Комбинаторика]]

Версия 13:51, 14 января 2013

Определение:
Требуется посчитать количество ожерелий из [math]n[/math] бусинок, каждая из которых может быть покрашена в один из [math] k [/math] цветов. При сравнении двух ожерелий их можно поворачивать, но не переворачивать (т.е. разрешается сделать циклический сдвиг).


Решение этой задачи опирается на * Лемму Бёрнсайда и Теорему Пойа.


Определение:
Инвариантная перестановка — такая перестановка, которая по условию задачи не меняет сам объект, а только его представление.

Примером инвариантной перестановки в нашем случае является циклический сдвиг.


Определение:
Неподвижной точкой [math]f[/math] для перестановки называется такой элемент, который инвариантен относительно этой перестановки.


Алгоритм решения задачи про ожерелья

Пусть нам даны бусинки [math]k[/math] различных цветов, а ожерелье должно состоять из [math]n[/math] бусинок.

Для решения воспользуемся формулой из теоремы Пойа.


[math]C =[/math] [math] \frac{1} {|G|}[/math][math]\sum\limits_{l \in G} k^{P(l)}[/math]


Очевидно, что для каждой перестановки длины [math]n[/math] существует ровно [math]n[/math] циклических сдвигов, теперь найдем [math]P(i)[/math]. Заметим, что в [math]i[/math]-ой перестановке на [math]l[/math]-ой позиции стоит элемент [math](i + l)\mod n[/math]. Также, заметим, что элемент [math]a[/math] переходит в элемент [math]a + in[/math], где [math]i \in [1; k][/math]. Из этого следует, что длина цикла для [math]i[/math]-ой перестановки равна [math]lcm(n, i)/i = n/gcd(i,n)[/math].Откуда следует что:

[math]C =[/math] [math] \frac{1} {n}[/math][math]\sum\limits_{i = 1}^{n} k^{gcd(i,n)}[/math].


где [math]C[/math] - кол-во различных ожерелий,которые можно составить из [math]n[/math] бусинок [math]k[/math] различных цветов.


См. также