非递归格雷码算法的理解(Non-recursive Grey code algorithm unde

2019-10-19 10:05发布

这是从算法的书任务。

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

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位的字符串,如果只有操作有翻转?

这混淆了我很多。 唯一的“人”的方法,我至今不解的是:取套从低n位,复制它们,反转第2集,第1套加0的每一个元素中,添加1的做在第二集中的每个元素。 DONE(例如: 0 1 - > 0 1 | 0 1 - > 0 1 | 1 0 - > 00 01 | 11 10 - > 11 01 11 10处理完毕。

谢谢你的帮助

Answer 1:

这个问题的答案全部四个您的问题是,这种算法不具有的较低值开始n 。 它生成具有相同的长度的所有字符串,并且i-th (对于i = 1,...,2 N-1)从生成的字符串(i-1)-th之一。

下面是对于n = 4的拳头几个步骤:

开始以G 0 = 0000

为了生成G 1,翻转0-th G中0比特,作为0是的至少显著的位置1中的1 = 0001 b中的二进制表示。 克1- = 0001

为了产生G 2,翻转1-st G中1位,因为1是的至少显著的位置1中的2 = 0010 b中的二进制表示。 克2- = 0011

为了产生G 3,翻转0-th G中2位,作为0是的至少显著的位置1中的3 = 0011 b中的二进制表示。 克3- = 0010

为了产生G 4,翻转2-nd G中3位,作为2是的至少显著的位置1中的4 = 0100 B中的二进制表示。 G 4 = 0110

为了生成克5,翻转0-th中G 4位,如0是的至少显著的位置1中的5 = 0101 b中的二进制表示。 克5 = 0111



文章来源: Non-recursive Grey code algorithm understanding