在數字系統中,只能識別0和1,各種數據只有轉換成二進制碼後才能進行處理。格雷碼是壹種不加權碼,采用絕對編碼方式。典型的格雷碼是壹步自互補碼,具有反射和循環特性。其循環性和單步性的特點消除了取隨機數時產生嚴重誤差的可能性,其反射性和自補性的特點使求逆非常方便。格雷碼屬於可靠性編碼,是壹種誤差最小化的編碼方法,因為自然的二進制碼可以通過數模轉換器直接轉換成模擬信號,但在某些情況下,比如二進制碼從十進制3轉換成十進制4時,每壹位都要改變,這就使得數字電路產生壹個很大的尖峰電流脈沖。而格雷碼則沒有這個缺點。這是壹種數字排序系統,其中所有相鄰的整數在數字表示上只有壹個數字不同。當它在任意兩個相鄰數字之間轉換時,只有壹個數字發生變化。它大大減少了從壹種狀態到下壹種狀態的邏輯混亂。另外,由於最大數和最小數之間只有壹個數不同,所以通常也稱為格雷反射碼或循環碼。下表是幾種自然二進制碼和格雷碼的對照表:
壹般來說,普通二進制碼和格雷碼可以通過以下方式相互轉換:
二進制代碼->;格雷碼(編碼):從最右邊的位開始,每個位依次與左邊的位進行異或,作為對應格雷碼位的值,最左邊的位保持不變(相當於左邊的0);
格雷碼->二進制碼(解碼):將每壹位與左起第二位的左位解碼值進行異或,作為該位的解碼值(最左位不變)。
數學(計算機)描述:
原碼:p[0 ~ n];格雷碼:c[0~n](n?n);代碼:c = G(p);解碼:p = F(c);寫字時,數字從左到右遞減。
代碼:c=p XOR p[i+1](i?n,0?我?n-1),c[n]= p[n];
解碼:p[n]=c[n],p=c XOR p[i+1](i?n,0?我?n-1)。
格雷碼是由貝爾實驗室的弗蘭克·格雷在20世紀40年代提出的(1880由法國工程師Jean-Maurice-Emlle提出)。
Baudot),用於在使用PCM(Pusle Code Modulation)方法傳輸信號時避免錯誤,並於3月1953日獲得美國專利。根據定義,格雷碼的編碼方法不是唯壹的,但這裏討論的是最常用的壹種。
格雷碼是中國人的祖先發現的。
九鏈和格雷碼
通過分析解九鏈的完整記數法,因為壹次只移動壹個環,所以兩步的表達式只相差壹個數。我們以五環為例。左起第壹列的五位數字是五環狀態,從第壹環到第五環依次排列。第二列是表示逆序的五位數,看起來是二進制數,但對比第四列可以看出,這不是二進制數表示的步數。第三列是從初始狀態到該狀態的步數。最右邊的壹列是步驟的二進制表示。
00000-00000-0-00000
10000-00001-1-00001
11000-00011-2-00010
01000-00010-3-00011
01100-00110-4-00100
11100-00111-5-00101
10100-00101-6-00110
00100-00100-7-00111
00110-01100-8-01000
10110-01101-9-01001
11110-01111-10-01010
01110-01110-11-01011
01010-01010-12-01100
11010-01011-13-01101
10010-01001-14-01110
00010-01000-15-01111
00011-11000-16-10000
10011-11001-17-10001
11011-11011-18-10010
01011-11010-19-10011
01111-11110-20-10100
11111-11111-21-10101
我們發現右邊壹欄的數字正是二進制數從十進制數0到21的格雷碼!這當然需要21步。如果依次寫出5位二進制數,就是
10111-11101-22-10110
00111-11100-23-10111
00101-10100-24-11000
10101-10101-25-11001
11101-10111-26-11010
01101-10110-27-11011
01001-10010-28-11100
11001-10011-29-11101
10001-10001-30-11110
00001-10000-31-11111
這說明對於壹個只有五個鏈環的五鏈環鏈,從初始狀態到1111的狀態用的不是最多,到0001的狀態用的最多,有31步。同樣,對於九環鏈,從初始狀態11111111開始用的不是最多,在狀態000000001用的最多。格雷碼1111111代表二進制數1065438+。這就是九鏈所包含的數學內涵。
註意:從二進制數到格雷碼:從右到左檢查,如果壹個數的左邊是0,則該數不變;如果是1,數字就變了(0變成1,1變成0)。比如二進制數11011的格雷碼就是1010。
格雷碼變二進制數:從右向左檢查,如果壹個數的左位數之和是偶數,則該數保持不變;如果是奇數,數字會改變。
比如格雷碼11011,表示二進制數是10010。
以上可以用來幫助記憶:2G變零,G2變奇偶。
這樣,我們不僅可以知道從壹個狀態到另壹個狀態使用壹個完整的解需要多少步,還可以知道使用壹個簡單的解需要多少步,並且可以知道下壹個動作是什麽。(除了0000000000和1111111兩個狀態外,任何狀態都可以轉化為兩個狀態,即有兩個動作。)
例如,假設九鏈的初始狀態為110110,所需終止狀態為00101165438。簡單的解決方案和完整的解決方案需要多少步驟?第壹步是什麽?
解(1)初始狀態1101110,格雷碼011001,轉換。端接狀態為00100111,格雷碼為1110065438,轉換後的二進制數為100。兩者相差326-141=186,完整的求解需要186步。
(2)由於141的初始條件小於327的終止條件,所以第壹步應該是142,對應的二進制是010001165438,轉換成格雷碼是0165438。
(3)簡單求解步驟,我們分別從141,327計算對應的簡單步驟,
對於N=141,我們得到N0 = 103;對於N=327,N0=242。兩者之差為139,所以簡單步驟為139。