格雷码(Gray code)是一种任意两相邻项有且仅有一位不同的二进制编码。
直观来看,其构造方式如下:假如我们构造出了格雷码g0,1,⋯,2m−1,现在考虑构造m+1位格雷码。我们将前2m位复制一遍,然后反转在原序列中的位置,也即g’2m+i=g2m−1−i,i∈[0,2m);然后在最后2m项格雷码的左侧分别添上1。由此有g2m+i=g2m−1−i+2m。
实际操作时,可以采用相邻两项的异或值与前缀异或和快速构造。假若有gx与gx−1的异或值序列s1,2,⋯,2m−1,那么便有s2m+i=si,i∈[1,2m),同时有s2m+1=g2m+1⊕g2m=2m。
例如,前8项格雷码的二进制表示为:{0b000,0b001,0b011,0b010,0b110,0b111,0b101,0b100},相邻两项异或值为{1,2,1,4,1,2,1}。
(更多…)