304
правки
Изменения
→Построение кода Грея для перестановок
Будем строить код Грея для длины <tex>n = k</tex>. Предположим, что нам известен код Грея для перестановок длиной <tex>k - 1</tex>. Возьмем первую перестановку из известного нам кода. Она имеет следующий вид: <tex>\{a_1, a_2, a_3, \dots, a_{k-1}\}</tex>
Сначала запишем число <tex>k</tex> в начало этой перестановки, после чего будем двигать его вправо элементарными транспозициями (подчёркнуты пары переставляемых элементов).
* <tex>\{\underline{k, a_1}, a_2, a_3, \dots, a_{k-1}\}</tex>
* <tex>\{a_1, a_2, a_3, \dots, a_{k-1}, k\}</tex>
Получим <tex>k</tex> различных перестановок, отличающихся одной элементарной транспозицией. Возьмем следующую строку перестановку из кода Грея для перестановок длиной длины <tex>n = k - 1</tex>, которая будет выглядеть так и припишем в конце число <tex>k</tex>. Эта перестановка отличается на одну элементарную транспозицию (т.к. мы получилипоследние элементы совпадают, что элемент стоящий а префиксы длины <tex>k - 1</tex> отличаются на первом месте в перестановке будет "двигаться" вправо, то и во второй перестановке первый элемент "поменяется" со вторымэлементарную транспозицию). Пусть она имеет следующий вид:
<tex>\{a_2b_1, a_1b_2, a_3b_3, \dots, a_b_{k-1}\}</tex>
Элемент <tex>k</tex> записываем в конец и начинаем "двигать" его влево:
* <tex>\{a_2b_1, a_1b_2, a_3b_3, \dots, \underline{a_b_{k-1}, k}\}</tex>* <tex>\{a_2b_1, a_1b_2, a_3b_3, \underline{\dots, k}, a_b_{k-1}\}</tex>* <tex>\{a_2b_1, a_1b_2, \underline{a_3b_3, k}, \dots, a_b_{k-1}\}</tex>* <tex>\{a_2b_1, \underline{a_1b_2, k}, a_3b_3, \dots, a_b_{k-1}\}</tex>* <tex>\{\underline{a_2b_2, k}, a_1b_1, a_3b_3, \dots, a_b_{k-1}\}</tex>* <tex>\{k, a_2b_1, a_1b_2, a_3b_3, \dots, a_b_{k-1}\}</tex>
== Пример применения алгоритма ==