ในส่วนนี้เราจะมาดูกันว่าเราสามารถสร้างรหัสสีเทาของ n บิตโดยใช้วิธีการย้อนรอยได้อย่างไร รหัสสีเทา n บิตนั้นโดยทั่วไปแล้วจะเป็นรูปแบบบิตตั้งแต่ 0 ถึง 2^n – 1 ซึ่งรูปแบบที่ต่อเนื่องกันนั้นแตกต่างกันหนึ่งบิต ดังนั้นสำหรับ n =2 รหัสสีเทาคือ (00, 01, 11, 10) และค่าเทียบเท่าทศนิยมคือ (0, 1, 3, 2) โปรแกรมจะสร้างทศนิยมเทียบเท่ากับค่ารหัสสีเทา
อัลกอริทึม
generateGray(arr, n, num)
begin if n = 0, then insert num into arr return end if generateGray(arr, n-1, num) num := num XOR (1 bit left shift of n-1) generateGray(arr, n-1, num) end
ตัวอย่าง
#include<iostream> #include<vector> using namespace std; void generateGray(vector<int>&arr, int n, int &num){ if(n==0){ arr.push_back(num); return; } generateGray(arr, n-1, num); num = num ^ (1 << (n-1)); generateGray(arr, n-1, num); } vector<int> gray(int n){ vector<int> arr; int num = 0; generateGray(arr, n, num); return arr; } main() { int n; cout << "Enter number of bits: "; cin >> n; vector<int> grayCode = gray(n); for(int i = 0; i<grayCode.size(); i++){ cout << grayCode[i] << endl; } }
ผลลัพธ์
Enter number of bits: 3 0 1 3 2 6 7 5 4