这是算法手册中的任务。
问题是我完全不知道从哪里开始!
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
已完成。
感谢您的帮助
答案 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
。