【问题标题】:Non-recursive Grey code algorithm understanding非递归格雷码算法理解
【发布时间】:2014-02-26 11:12:26
【问题描述】:

这是算法书上的任务。

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

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,previous 是来自 n=1 的那个)?

4) 如果唯一的操作是翻转,我如何将 1 位字符串转换为 2 位字符串?

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

感谢您的帮助

【问题讨论】:

    标签: algorithm gray-code


    【解决方案1】:

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

    这是 n = 4 的第一步:

    从G开始0 = 0000

    要生成G1,翻转G0中的0-th位,因为01在二进制表示中最不重要的位置1 = 0001b。 G1 = 0001.

    要生成G2,翻转G1中的1-st位,因为11在二进制表示中最不重要的位置2 = 0010b。 G2 = 0011.

    要生成G3,翻转G2中的0-th位,因为01在二进制表示中最不重要的位置3 = 0011b。 G3 = 0010.

    要生成G4,翻转G3中的2-nd位,因为21在二进制表示中最不重要的位置4 = 0100b。 G4 = 0110.

    要生成G5,翻转G4中的0-th位,因为01在二进制表示中最不重要的位置5 = 0101b。 G5 = 0111.

    【讨论】:

    • 您可以将用于递增的规则声明为偶数/奇数值的通用规则:)
    猜你喜欢
    • 1970-01-01
    • 2019-03-12
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多