Gray binary code is a way of expressing binary numbers such that consecutive numbers differ in exactly 1 digit.
For example, in our conventional binary system, the numbers are
- 000001010011100101110111等
在Gray中,它们是:
- 000001011010110111101100等
在第一个系统中,当我们从'001'到'010'时,有2个变化,即单位的位置从'1'变为'0',下一个数字从'0'变为'1'。 但是在Gray的系统中,“ 001”变为“ 011”,其中只有1个更改(第二个数字的更改)。
格雷码用于通信中的错误纠正。
生成长度为n的格雷码
我们是否可以使用某个属性轻松生成给定长度的格雷码? 是! 在前面的示例中,我们生成了n = 3的所有格雷码。 忽略最高有效位(MSB),请注意第4个和第5个数字的前两位数字如何相等,第3个和第6个数字,第2个和第7个数字以及第1个和第8个数字也是如此。 最后4个数字是反射如果忽略最后一位,则为前4位。 但是最后一位数字是第一个4数字为0,最后四个数字为1 ...我们有一个递归公式。
R(0)= [] R(n + 1)= 0R(n)+ 1R'(n)(R'(n)= R(n)的倒数) 对于n = 0,我们有一个空列表。 对于n + 1,我们取R(n),将0附加到所有元素上,并向此序列添加以1附加的R(n)的倒数。
可以用Python简洁地表示为:
def gray_code(n):
if n <= 0:
return []
if n == 1:
return ['0', '1'