非递归格雷码算法的理解

时间:2014-02-26 11:12:27

标签: algorithm gray-code

这是算法手册中的任务。

问题是我完全不知道从哪里开始!

Trace the following non-recursive algorithm to generate the binary reflexive
Gray code of order 4. Start with the n-bit string of all 0’s. 
For i = 1, 2, ... 2^n-1, generate the i-th bit string by flipping bit b in the 
previous bit string, where b is the position of the least significant 1 in the 
binary representation of i. 

所以我知道1位的格雷码应为0 1,2 00 01 11 10等。

很多问题

1)我是否知道,对于n = 1,我可以从0 1开始?

2)我应该如何理解“从所有0的n位字符串开始”?

3)“前一位字符串”?哪个字符串是“上一个”?以前的意思是从较低的n位? (例如,对于n = 2,先前是n = 1的那个)?

4)如果只有翻转操作,我如何将1位字符串转换为2位字符串?

这让我很困惑。到目前为止我唯一理解的“人”方法是:从低位获取集合,复制它们,反转第2集,向第1集中的每个元素添加0,在第2集中添加1对每个元素。完成(示例:0 1 - > 0 1 | 0 1 - > 0 1 | 1 0 - > 00 01 | 11 10 - > 11 01 11 10已完成。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

所有四个问题的答案都是该算法不以较低的n值开头。它生成的所有字符串都具有相同的长度,i-th(对于i = 1,...,2 n -1)字符串是从{{1一个。

这是n = 4的第几步:

以G 0 = (i-1)-th

开头

要生成G 1 ,请翻转G 0 中的0000位,因为0-th是最低有效位0的位置在1 = 0001 b 的二进制表示中。 G 1 = 1

要生成G 2 ,请翻转G 1 中的0001位,因为1-st是最低有效位1的位置在2 = 0010 b 的二进制表示中。 G 2 = 1

要生成G 3 ,请翻转G 2 中的0011位,因为0-th是最低有效位0的位置在3 = 0011 b 的二进制表示中。 G 3 = 1

要生成G 4 ,请翻转G 3 中的0010位,因为2-nd是最不重要2的位置在4 = 0100 b 的二进制表示中。 G 4 = 1

要生成G 5 ,请翻转G 4 中的0110位,因为0-th是最低有效位0的位置在5 = 0101 b 的二进制表示中。 G 5 = 1