一组格雷码的相邻两个码只有一个二进制位不同,现在介绍一种生成这种码的方法。
最简单的格雷码是0、1。
0
1
将其复制,得到两组格雷码,确保每行相同,
0 0
1 1
再对每个格雷码开头填0 或1,每一列填的数要相同
00 10
01 11
再按U型连接起来,就得到两位的格雷码,如下:
00
01
11
10
类似的,可以得到任意位数的格雷码。
matlab代码如下
%generate gray code,first data is 0 vector
%N>=2
%hint:
%0 => 0 0 => 00 10 =>00 => 00 00 => 0 00 1 00......
%1 1 1 01 11 01 01 01 0 01 1 01
% 11 11 11 0 11 1 11
% 10 10 10 0 10 1 10
%
function gray_code=gen_gray_code(N)
sub_gray=[0;1];
for n=2:N
top_gray=[zeros(1,2^(n-1))' sub_gray];
bottom_gray=[ones(1,2^(n-1))' sub_gray];
bottom_gray=bottom_gray(end:-1:1,:);
sub_gray=[top_gray;bottom_gray];
end
gray_code=sub_gray;
end
>> gen_gray_code(4)
ans =
0 0 0 0
0 0 0 1
0 0 1 1
0 0 1 0
0 1 1 0
0 1 1 1
0 1 0 1
0 1 0 0
1 1 0 0
1 1 0 1
1 1 1 1
1 1 1 0
1 0 1 0
1 0 1 1
1 0 0 1
1 0 0 0