格雷码运算研究 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表: 一般的,普通二进制码与格雷码可以按以下方法互相转换: 二进制码格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0); 格雷码〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。 数学(计算机)描述: 原码:p〔0n〕;格雷码:c〔0n〕(N);编码:cG(p);解码:pF(c);书写时从左向右标号依次减小。 编码:cpXORp〔i1〕(N,0n1),c〔n〕p〔n〕; 解码:p〔n〕c〔n〕,pcXORp〔i1〕(N,0n1)。 GrayCode是由贝尔实验室的FrankGray在20世纪40年代提出的(是1880年由法国工程师JeanMauriceEmlle Baudot发明的),用来在使用PCM(PusleCodeModulation)方法传送讯号时避免出错,并于1953年3月17日取得美国专利。由定义可知,GrayCode的编码方式不是唯一的,这里讨论的是最常用的一种。 〔colorFF0000〕格雷码是中国人的老祖先发现的〔color〕 九连环与格雷码 分析解九连环的完全记法,由于每次只动一个环,故两步的表示也只有一个数字不同。下面以五个环为例分析。左边起第一列的五位数是5个环的状态,依次由第一环到第五环。第二列是把这个表示反转次序的五位数,似乎是二进制数,但是与第四列比较就可以看出这不是步数的二进制数表示。第三列是从初始状态到这个状态所用的步数。最右边一列才是步数的二进制表示。 0000000000000000 1000000001100001 1100000011200010 0100000010300011 0110000110400100 1110000111500101 1010000101600110 0010000100700111 0011001100801000 1011001101901001 11110011111001010 01110011101101011 01010010101201100 11010010111301101 10010010011401110 00010010001501111 00011110001610000 10011110011710001 11011110111810010 01011110101910011 01111111102010100 11111111112110101 我们发现,右边一列数恰好是十进制数0到21的二进制数的格雷码!这当然需要21步。如果把5位二进制数依次写完,就是 10111111012210110 00111111002310111 00101101002411000 10101101012511001 11101101112611010 01101101102711011 01001100102811100 11001100112911101 10001100013011110 00001100003111111 这说明,对于只有5个环的五连环,从初始到状态11111用的不是并不是最多,到状态00001才是最多,用31步。类似,对于九连环,从初始到状态111111111用的不是并不是最多,到状态000000001才是最多,用511步。由于格雷码111111111表示二进制数101010101,表示十进制数341,故从初始状态到9个环全部上去用341步。这就是九连环中蕴涵的数学内涵。 注由二进制数转换为格雷码:从右到左检查,如果某一数字左边是0,该数字不变;如果是1,该数字改变(0变为1,1变为0)。例,二进制数11011的格雷码是10110。 由格雷码表示变为二进制数:从右到左检查,如果某一数字的左边数字和是偶数,该数字不变;如果是奇数,该数字改变。 例格雷码11011表示为二进制数是10010。 以上可以用口诀帮助记忆:2G一改零不改,G2奇变偶不变。 这样,我们不但可以知道从任何一个状态到另一个状态用完整解法需要多少步,用简单解法又需要多少步,而且可以知道下一步的动作是什么。(除去两个状态000000000和111111111,任何状态下都可以转变为两个状态,即有两个动作。) 例设九连环的初始状态是110100110,要求终止状态是001001111,简单解法与完整解法各需要多少步?第一步是什么动作? 解(1)初始状态110100110,格雷码是011001011,转换为二进制数是010001101,相应十进制数是141。终止状态是001001111,格雷码是111100100,转换为二进制数是101000111,相应十进制数是327。二者差326141186,完整解法需要186步。 (2)由于初始状况141小于终止状况327,第一步应成为142,相应二进制是010001110,转换为格雷码是011001001,状态是100100110,与原状态比较,第一步应上第2环。 (3)简单解法步数,我们由141,327分别求相应的简单步数, 对于N141,得到N0103;对于N327,N0242。二者差139,故简单步数139