Коды Грея для перестановок
Версия от 09:17, 3 декабря 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 |
Определение
Коды Грея для перестановок - называют такое упорядочение перестановок, что соседние перестановки отличаются только элементарной транспозицией.
Построения Кода Грея для перестановок на Pascal
for i := 1 to n do
begin
P[i] := i;
C[i] := 1;
PR[i] := true;
end;
C[n] := 0;
for g := 1 to n do
write(P[g], ' ');
writeln;
i := 1;
while i < n do
begin
i := 1;
x := 0;
while C[i] = n - i + 1 do
begin
PR[i] := not PR[i];
C[i] := 1;
if PR[i] then x := x + 1;
i := i + 1;
end;
if i < n then
begin
if PR[i] then k := C[i] + x
else k := n - i + 1 - C[i] + x;
swap(P[k], P[k + 1]);
for g := 1 to n do
write(P[g], ' ');
writeln;
C[i] := C[i] + 1
end;
end;