标签: 二进制

  • 随记 – 五月二日 – 初探格雷码

    格雷码(Gray code)是一种任意两相邻项有且仅有一位不同的二进制编码。

    直观来看,其构造方式如下:假如我们构造出了格雷码$g_{0, 1, \cdots, 2^m-1}$,现在考虑构造$m+1$位格雷码。我们将前$2^m$位复制一遍,然后反转在原序列中的位置,也即$g’_{2^m+i}=g_{2^m-1-i}, i \in [0, 2^m)$;然后在最后$2^m$项格雷码的左侧分别添上$1$。由此有$g_{2^m+i}=g_{2^m-1-i}+2^m$。

    实际操作时,可以采用相邻两项的异或值与前缀异或和快速构造。假若有$g_x$与$g_{x-1}$的异或值序列$s_{1, 2, \cdots, 2^m-1}$,那么便有$s_{2^m+i}=s_{i}, i \in [1, 2^m)$,同时有$s_{2^m+1}=g_{2^m+1} \oplus g_{2^m}=2^m$。

    例如,前8项格雷码的二进制表示为:$\{\text{0b}000, \text{0b}00{\color{blue}1}, \text{0b}0{\color{blue}1}1, \text{0b}01{\color{blue}0}, \text{0b}{\color{blue}1}10, \text{0b}11{\color{blue}1}, \text{0b}1{\color{blue}0}1, \text{0b}10{\color{blue}0}\}$,相邻两项异或值为$\{1,2,1,4,1,2,1\}$。

    (更多…)