Изменения

Перейти к: навигация, поиск

Коды Грея для перестановок

172 байта добавлено, 23:26, 6 декабря 2014
Псевдокод получения кода Грея
Получаем код Грея рекурсивно, в базовом случае <tex>n = 1</tex> возвращаем список из одной перестановки <tex>\{1\}</tex>.
'''list'''<permutation> gray_code(n): '''if''' n == 1 '''return''' [{1}] <font color=darkgreen> //возращаем список из одной перестановки</font color=darkgreen> '''else''' '''list'''<permutation> result = [] <font color=darkgreen> //пустой список</font color=darkgreen> '''list'''<permutation> perms = gray_code(n - 1) <font color=darkgreen> //perms {{---}} перестановки из n - 1 элемента</font color=darkgreen> '''bool''' backward = false <font color=darkgreen> //переменная которая говорит с какой стороны заполнять перестановку</font color=darkgreen> ('''for''' perm '''in ''' perms ) <font color=darkgreen> //perm {{---}} текущая перестановка</font color=darkgreen> '''if''' backward '''permutation''' current = concat(perm, {n})<font color=darkgreen> //дописываем {n} в конец perm</font color=darkgreen> result.append(current)<font color=darkgreen> //добавляем в ответ перестановку current</font color=darkgreen> ('''for''' (i = n; i > 1; i--'''downto''' 2) swap(current[i - 1], current[i])<font color=darkgreen> //переставляем n</font color=darkgreen> result.append(current) <font color=darkgreen> //добавляем в ответ перестановку current</font color=darkgreen> '''else''' '''permutation''' current = concat({n}, perm) <font color=darkgreen> //дописываем {n} в начало perm</font color=darkgreen> result.append(current) <font color=darkgreen> //добавляем в ответ перестановку current</font color=darkgreen> '''for''' (i = 1; i < n; i++) swap(current[i], current[i + 1]) <font color=darkgreen> //переставляем n</font color=darkgreen>
result.append(current) <font color=darkgreen> //добавляем в ответ перестановку current</font color=darkgreen>
('''for''' i = 1 '''to''' n - 1) swap(current[i], current[i + 1]) <font color=darkgreen> //переставляем n</font color=darkgreen> result.append(current) <font color=darkgreen> //добавляем в ответ перестановку current</font color=darkgreen> backward = !backward <font color=darkgreen> //меняем состояние backward</font color=darkgreen> '''return''' result <font color=darkgreen>//возвращаем ответ в виде списка</font color=darkgreen>
== Примеры кодов Грея для перестановок ==
130
правок

Навигация