德布鲁因序列

问题:有2的n次方个数字,使得这些二进制数字组成一个二进制串,新的二进制串可按顺序循环组合成不相同的二进制串.
荷兰数学家De Bruijn解决了这个问题.


德布鲁因序列_第1张图片
4.jpg

1,德布鲁因序列:

B(k, n),是k元素构成的循环序列。所有长度为n的k元素构成序列都在它的子序列(以环状形式)中,出现并且仅出现一次。
例如:
序列00010111属于B(2,3)。
00010111的所有长度为3的子序列为000,001,010,101,011,111,110,100.

长度

德布鲁因序列的长度为
k的n次幂 为2的3次幂等于8

介绍完基本公式以及感念,估计很多同学跟我一样,一脸懵逼.不过不要紧.笔者慢慢来说,如果可以看到最后一定会有明白的.

2, 解释

大家可以去谷歌一下德布鲁因序列(以下简称DB),估计会出现都是跟一个魔术有关系.奈何笔者也是一个魔术的爱好者,所以顿时超感兴趣.下面就是见证奇迹的时刻(此处应有背景音乐,脑补一下)

魔术中的DB序列

1,首先要准备一副扑克牌,邀请5个人上来配合一下,(为什么是5个人,因为2的5次幂等于32),检查扑克牌是4个花色从1到8不同的数字.
2, 打乱扑克牌,让五个人从上面按依次拿走扑克牌.这时候你就可以说,我已经知道你们手里的牌都是什么了.(其实你并不知道)
3, 还有关键的一步,就是让五个人中,花色是黑色(黑桃, 梅花)的人举手.这时候你才真正知道他们的牌是什么.

答案在这里:
其实我们可以把5个人32张牌看成一个DB序列,
也就是B(2,5)有32个二进制串排列组合的方式.每个字符串的长度是5.
例如00000 左边第一位是0表示颜色(黑色, 红色), 左边第二位(花色),后三位表示是数字,正好000表示的为8


德布鲁因序列_第2张图片
1.jpeg

然后在对照图2.和拿到黑色牌举手人的顺序,就可以说出每个人的牌是什么了


德布鲁因序列_第3张图片
2.jpeg

当人有人会表示记不住.对于这个特殊的五位二进制数来说,也是有窍门的,左边第1个数,加上左边第3个数,依照二进制加法得到的数放在最右面,就是下一个五位数了.

推测DB序列

已B(2,3)为例子 组成的长度是3不同的二进制字符串 000, 001, 010, 011, 111, 110, 101, 100
如图从000开始走,


德布鲁因序列_第4张图片
3.png

最终都会回到000,得到的8位二进制串就是00010111或者是00011101.

最后

有什么不对的地方,欢迎讨论.

你可能感兴趣的:(德布鲁因序列)