生成中级格雷码

通过在每个步骤中翻转一个比特,生成长度为$2n+1$、汉明权重为$n$或$n+1$的所有比特串。
参数$n$(长度为$2n+1$) (最多15)
算法
初始位串
输出格式
输出  编号绘图

对象信息

这个汉明重量比特串的位数是其中的1。这个中间层猜想断言对于每$n\geq1$,都有一个长度为$2n+1$、Hamming权重为$n$或$n+1$的所有比特串的循环列表,该列表在每一步中翻转一个比特。哈维尔[Hav83]和巴克和维德曼[BW84]于20世纪80年代提出了这一推测。多年来,它引起了一些研究人员的极大关注,并在缪策的论文[Müt16]中得到了解决。Gregor、Mütze和Nummenpalo随后给出了一个简化的证明[GMN18]。这两种证明都是有建设性的,事实上,它们产生了两倍于指数的许多不同的列表。Mütze和Nummenpalo[MN20]在本文中描述了生成一个解的恒时间算法,这是该网站上运行的第一个算法(非对称)。下图显示了此解决方案的轮图,其中$n=3$,0=白色,1=黑色。

在他的书[Knu11]第7.2.1.3节中的问题56中,Knuth提出了一个更强有力的中层猜想。他要求提供一种解决方案,其中翻转序列,即在每个步骤中翻转的位位置序列,可以细分为相同长度的$2n+1$块$\alpha_0、\alpha_1、\ldots、\alba_{2n}$,并且通过对所有$i=1、\ ldots的$i$模$2n+1$的元素加法,从初始块$\alpha_0$获得$i$块$\ alpha_i$,20亿美元。这使得整个翻转序列的编码更加紧凑,其系数为$2n+1$,这是早期尝试在计算机帮助下通过实验解决中级猜想的关键因素(参见Shields and Savage的论文[SS99])。例如,$n=3$的循环对称性解决方案由$\alpha_0=6253462135$给出。从位字符串$x=1110000$开始,应用翻转序列$\alpha_0$生成字符串序列$11100001100101010010101011010001101001110,\ldots,0111000$,即,经过10次翻转后,我们得到一个与初始字符串$x$不同的位字符串,通过循环右移一个位置。更一般地说,在对所有$i=1、\ldots、2n+1$应用$\alpha_0、\ltots、\alpha_{i-1}$后,我们得到一个$x$的副本,它被$i$位置循环右移。梅里诺、米奇卡和缪策[MMM20]以更一般的形式证明了科努特的猜想,允许任意移位$s\in\{1,\ldots,2n\}$,它是$2n+1$的互质,也就是说,$\alpha_i$是通过对所有$i=1,\ldot,2n$的$i\cdots$module$2n+1$的元素加法从$\alfa_0$中获得的。不难看出,$s$与$2n+1$互素的条件是必要的,不能省略。论文[MMM20]中还提供了该算法的实现,使用每个生成的比特串的线性时间,这是该网站上运行的第二个算法($(2n+1)$-fold对称)。循环对称性可以在下面的轮盘图中很好地看到,其中显示了$n=3$和$s=1,\ldots,6$的解决方案。动画在圆环体上循环移动位。单击每个图形以启动/停止动画。

美元=1$美元=2$
美元=3$美元=4$
美元=5$美元=6$

中间层猜想有几个等价的公式。例如,该猜想相当于要求列出长度为$2n+2$、汉明权重为$n+1$的所有位串,以便任何两个连续的位串在与其他位交换第一位时有所不同(第一位将在0和1之间交替)。这类似于埃利希的星转置格雷码排列.这个猜想也可以这样表述:想象一组2n+1$的人被分成两组,大小分别为$n$和$n+1$,两个房间由一扇旋转门隔开。在每一步中,来自较大团队的一个人都会穿过大门加入另一个团队。目标是制定一个协议,使分成两个组的每个分区只遇到一次。

枚举(OEIS)

生成的位串的数量由中心二项式系数$2\binom{2n+1}{n}=\binom{20n+2}{n+1}$给出,即OEIS A000984公司.

下载源代码

[非对称[MN17]算法的压缩C++源代码(GNU GPL)]
[使用$(2n+1)$-fold对称(GNU GPL)的[MMM20]算法的压缩C++源代码]

工具书类