【发布时间】:2015-10-19 15:22:59
【问题描述】:
我正在尝试了解格雷码的工作原理。如果我们给出任何非负整数 n(其中 n 是位数),那么我们需要打印它的格雷码序列。下面是一些例子
2 位格雷码序列
Input = 2 bits
00 - 0
01 - 1
11 - 3
10 - 2
Output = [0,1,3,2]
3 位格雷码序列
Input = 3
000 0
001 1
011 3
010 2
110 6
111 7
101 5
100 4
Output = [0, 1, 3, 2, 6, 7, 5, 4]
根据我的理解,格雷码序列从 0 开始,在一个格雷码中,两个连续的值只有一位不同。不知道2的格雷码是怎么来的[0,1,3,2],3的格雷码是怎么来的[0,1,3,2,6,7,5,4]
【问题讨论】:
-
您正在处理比特 - 2 的幂。 gc(2) -> 2^2 -> 4. gc(3) -> 2^3 -> 8. 由于格雷码只有一位差异,因此这些位序列的排序不是“线性”的。这就是为什么你会得到十进制数字的“随机”排序。
-
好的。所以你说如果我给 2 那么它的 gc 变为 2^2 = 4。所以,它的 gc 变为 [0,1,2,3] 并且顺序可能会有所不同。同样,在 3 的情况下,gc 变为 2^3 = 8。我仍然不确定,因为 en.wikipedia.org/wiki/Gray_code 声明 3 的格雷码将是 [0,1,3,2,6,7,5,4]。如果我错了,请纠正我。
-
2 位格雷码可以有 2^2 = 4 个值。 3bit 有 8 个值,等等等等。没有什么神奇的。这只是简单的二进制编号。使它成为格雷码的原因是在列表中的任何两个位置之间,只有一位不同。除此之外,它仍然只是一个简单的 4 或 8 或 16 或任何数字列表。但格雷码决定了数字的顺序。
标签: gray-code