Коды Грея для перестановок
Версия от 03:39, 28 декабря 2010; Niko (обсуждение | вклад)
код Грея для перестановки при n = 2
1 2 2 1 |
код Грея для перестановки при n = 3
1 2 3 2 1 3 2 3 1 3 2 1 3 1 2 1 3 2 |
код Грея для перестановки при n = 4
1 2 3 4 2 1 3 4 2 3 1 4 2 3 4 1 3 2 4 1 3 2 1 4 3 1 2 4 1 3 2 4 1 3 4 2 3 1 4 2 3 4 1 2 3 4 2 1 4 3 2 1 4 3 1 2 4 1 3 2 1 4 3 2 1 4 2 3 4 1 2 3 4 2 1 3 4 2 3 1 2 4 3 1 2 4 1 3 2 1 4 3 1 2 4 3 |
Определение
Коды Грея для перестановок - называют такое упорядочение перестановок, что соседние перестановки отличаются только элементарной транспозицией.
Элементарной транспозицией называют транспозиция двух соседних элементов, то есть обмен местами двух соседних элементов.
Построения Кода Грея для перестановок
Строим из рекурсивных соображений. При фиксированной перестановки из
элемента можно перебрать все вариантов добавления к этой перестановке элемента , и этот перебор можно осуществить передвигая элемент каждый раз на соседнее место, Например3652147 -> 3652174 -> 3652714 -> 3657214 и т. д.
На фоне перебора позиций
-го элемента должны проводиться переборы перестановок меньшего порядка, к которым применяется тот же принцип, т.е., например в нашем случае после получения набора 7365214 требуется сдвинуть влево или вправо элемент 6.Действовать будем так. Каждые
итерации будем давать команду на сдвиг -го элемента, а затем менять направление движения его на противоположное и будем давать команду на сдвиг элемента с меньшим номером; для этих выделенных итераций нужно делать то же самое: на из них двигать -й элемент, а на -й итерации сменить ему направление движения, и т.д.Построение. Кроме рабочей перестановки
и её номера в факториальной системе (младший разряд - последний) потребуется иметь массив , задающий текущее направления движения всех элементов. Удобно еще иметь массив, сопоставляющий каждому элементу то место , на котором стоит стоит в перестановке .Начальное состояние.
Стандартный шаг. Увеличить вектор
Комментарии | ||||||
1 | 0000 | ---- | 1234 | 1234 | - | Здесь | не определено
2 | 0001 | ---- | 1243 | 1243 | 4 | Начинается движение эл. 4 |
3 | 0002 | ---- | 1342 | 1423 | 4 | |
4 | 0003 | ---- | 2341 | 4123 | 4 | |
5 | 0010 | ---+ | 2431 | 4132 | 3 | Шаг эл. 3, у 4 смена направления |
6 | 0011 | ---+ | 1432 | 1432 | 4 | |
7 | 0012 | ---+ | 1423 | 1342 | 4 | |
8 | 0013 | ---+ | 1324 | 1324 | 4 | |
9 | 0020 | ---- | 2314 | 3124 | 3 | Второй шаг эл. 3 |
10 | 0021 | ---- | 2413 | 3142 | 4 | |
11 | 0022 | ---- | 3412 | 3412 | 4 | |
12 | 0023 | ---- | 3421 | 4312 | 4 | |
13 | 0100 | --++ | 4321 | 4321 | 2 | Шаг эл. 2. Смена направлений у эл. 3 и эл. 4. |
14 | 0101 | --++ | 4312 | 3421 | 4 | |
15 | 0102 | --++ | 4213 | 3241 | 4 | |
16 | 0103 | --++ | 3214 | 3214 | 4 | |
17 | 0110 | --+- | 3124 | 2314 | 3 | |
18 | 0111 | --+- | 4123 | 2341 | 4 | |
19 | 0112 | --+- | 4132 | 2431 | 4 | |
20 | 0113 | --+- | 4231 | 4231 | 4 | |
21 | 0120 | --++ | 3241 | 4213 | 3 | |
22 | 0121 | --++ | 3124 | 2413 | 4 | |
23 | 0122 | --++ | 2143 | 2143 | 4 | |
24 | 0123 | --++ | 2134 | 2134 | 4 | |
25 | 1000 | -+-- | - | - | 1 | Остановка процесса |