Изменения

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

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

1540 байт убрано, 09:11, 12 января 2012
Нет описания правки
Код Грея получен.
== Псевдокод получения следующего кода Грея ==
Пусть нам известен Получаем код Грея для длины рекурсивно, в базовом случае ($n - = 1$, записанный в массив ) возвращаем список из строк $perm[i](j)$, где $i$ - номер одной перестановки, а $j\{n\}$ номера элементов перестановок (номерация начинается с единицы). При этом переменная $t = true$, $j = 1$:
procedure grаy_codegray_code(tn): boolean; j if n == 1: integer); varreturn = [{1}] i, c, l else: integer; begin result = [] if j < perms = gray_code(n - 1)! then {условие выхода из рекурсии} begin if t backward = true thenfalse begin for l := n - 1 downto 1 do {записываем элемент n в начало строки} perm[j](l + 1) in perms:= perm[j](l); perm[j](1) if backward:= n; for l : current = 1 to n do writelnconcat(perm[j](l), ' '); {выводим перестановкуn}) for i := 1 to n - 1 do begin c := perm[j] result.append(icurrent); {меняем элементы местами и выводим каждую новую перестановку} perm[j] for (i) := perm[j](n; i + > 1); perm[j](i + 1--) := c; for l := 1 to n do writeln swap(permcurrent[ji - 1](l), ' 'current[i]); {выводим перестановку} end; grаy_code result.append(not t, j + 1current); {повторяем процедуру} end else: begin perm[j] current = concat(n) := n; {записываем элемент n в конец строки}, perm) for l := 1 to n do writeln(perm[j] result.append(l), ' 'current); {выводим перестановку} for (i := n - 1 downto 1 do begin c := perm[j](; i)< n; {меняем элементы местами и выводим каждую новую перестановку} perm[j](i++) := perm swap(current[ji](i + 1); perm, current[j](i + 1) := c; for l := 1 to n do writeln(perm[j](l), ' '); {выводим перестановку} end; grаy_code result.append(not t, j + 1current); {повторяем процедуру} end; end; backward = !backward end;return result
304
правки

Навигация