自動生成格雷碼演算法

2021-08-14 18:34:10 字數 1127 閱讀 2527

典型的二進位制格雷碼(binary gray code)簡稱格雷碼,

在一組數的編碼中,若任意兩個相鄰的**只有一位二進位制數不同,則稱這種編碼為

格雷碼(gray code),另外由於最大數與最小數之間也僅一位數不同,即「首尾相連」,因此又稱

迴圈碼或

反射碼。

自動生成格雷碼的演算法主要利用以下規則:

1. 1位格雷碼有兩個碼字。

2. (n+1)位格雷碼中的前2n個碼字等於n位格雷碼的碼字,按順序書寫,加字首0。

3. (n+1)位格雷碼中的後2n個碼字等於n位格雷碼的碼字,按逆序書寫,加字首1。

4. (n+1)位格雷碼的集合 = n位格雷碼集合(順序)加字首0 + n位格雷碼集合(逆序)加字首1。

簡而言之,就是

後面的格雷碼等於其相鄰的前面的格雷碼

按順序書寫,加字首0,再按逆序書寫,加字首1

。如下圖所示:

按照這個思路很容易的實現**:

[cpp]view plain

copy

void

generatergraycode(

intn)  

//在前面產生的n-1位格雷碼前面新增一位數0產生2^(n-1)個n位格雷碼,並替換掉原來的n-1位格雷碼

inttempgraycodevecsize = tempgraycodevec.size();  

for(

intj = 0; j 

//將前面產生的n-1位格雷碼的順序反轉

//在反轉後的n-1位格雷碼前面新增一位數1產生剩下2^(n-1)個n位格雷碼,並儲存起來

for(

intjj = tempgraycodevecsize-1; jj >= 0; jj--)  

//釋放掉臨時儲存空間

tempgraycodevec.clear();  

}  }  

//輸出n位格雷碼

for(

size_t

i = 0; i 

cout <

}  

自動生成格雷碼

出處 blog.csdn.net beiyeqingteng 問題 產生n位元的所有格雷碼。格雷碼 gray code 是乙個數列集合,每個數使用二進位來表示,假設使用n位元來表示每個數字,任兩個數之間只有乙個位元值不同。例如以下為3位元的格雷碼 000 001 011 010 110 111 10...

也談自動生成格雷碼演算法

工作10年了,總覺得自己是不是應該學點什麼。今天突發奇想,是不是可以用程式來自動生成格雷碼?其實只要看懂了這張圖,格雷碼的編譯碼都是小菜一碟。格雷碼的每乙個位其實都是對應二進位製碼的位跟其較高位的異或。簡單說就是g0 b1 b0 拿起gcc就開始寫,編碼函式就這麼完成了。int grayencode...

生成格雷碼

程式設計題 生成格雷碼 在一組數的編碼中,若任意兩個相鄰的 只有一位二進位制數不同,則稱這種編碼為格雷碼 gray code 請編寫乙個函式,使用遞迴的方法生成n位的格雷碼。給定乙個整數n,請返回n位的格雷碼,順序為從0開始。測試樣例 1返回 0 1 思想 用遞迴法實現,把求n位格雷碼分解為求n 1...