关于任意正整数k的长度为⌈log₂k⌉的格雷码存在性归纳证明的疑问
关于任意正整数k的长度为⌈log₂k⌉的格雷码存在性归纳证明的疑问
我最近在啃格雷码的存在性证明,核心目标是要证对任意正整数k,都存在长度为⌈log₂k⌉的格雷码——其中偶数k对应的格雷码是闭合的(形成单一循环),奇数k对应的则是开放的(呈路径状)。
证明用的是数学归纳法,归纳假设是:对所有小于n的正整数k,都存在长度为⌈log₂k⌉的格雷码,且偶数k对应闭合码,奇数k对应开放码。
目前我能理解一部分内容:
- 基础情况书上说很简单,但k=1的时候对应的格雷码长度是0,这点感觉有点别扭不过先不纠结了。
- 当n是偶数的时候,逻辑很清晰:取一个大小为n/2的格雷码,做两份拷贝,一份前面加0前缀,另一份前面加1前缀。把它们按特定方式排列就能形成一个循环,而且新格雷码的位数计算下来是⌈log₂(n/2)⌉ + 1 = ⌈log₂n⌉,完全符合要求。
但当n是奇数的时候,书上的证明我就彻底懵了,原文是这么写的:
设n=2k+1。构造两个大小为k的格雷码,按之前的方式连接。如果2k不是2的幂,那么会有一些长度为⌈log₂2k⌉的字符串没被用作格雷码的元素。我们可以把其中一个未使用的字符串和一个已使用的字符串连接起来,打破原来2k长度的循环,最终得到一个长度为2k+1的开放路径,位数也符合条件。如果2k是2的幂,那就没有未使用的字符串了,这时候需要给代码再加一位,总位数就变成⌈log₂2k⌉ + 1 = ⌈log₂(2k+1)⌉。
我完全搞不懂这里的“未使用的字符串”指的是什么:为什么2k不是2的幂时会有这类未被使用的字符串?而2k是2的幂时就没有了?
备注:内容来源于stack exchange,提问作者piero
相关产品推荐
相关产品推荐

