因为德布鲁因序列是循环序列,而左移操作会自动在最低位填0,所以习惯将全0子串放在序列的最高位,这样比较方便,不需要特殊处理。 德布鲁因序列的生成与索引表的构建 德布鲁因序列可以通过构建德布鲁因图得到,图中每条哈密顿路径(Hamiltonian path)都对应一个德布鲁因序列, 数量共有 (k!)kn−1kn(k!)kn−1kn 具体生...
我们先假设德布鲁因序列是二进制的,即 k = 2。想计算序列数量总共有多少个,其实可以看这个序列每个子序列转换成10进制的数最大的是多少,那么就是它的数量。 由于每相邻的子序列是相互依赖的关系,比如下一个子序列是前一个子序列左移一位再加上 0 或者 1,产生下一个子序列。当然最后要 mod 2^n^,这样控制...
看似神奇的魔术表演,其背后也蕴含着丰富的数学原理,感性与理性的融合,带来不一样的数学体验。本次介绍了魔术in cycle背后的德布鲁因序列,结合图论相关知识分析了对于任意元素k和窗口长度n,都存在并且如何构造德布鲁因序列,接着联系生活实际,分享了德布鲁因序列在机器
在数值计算中,为了控制精度以及避免越界,需要严格控制数值的范围,有时需要知道二进制表示中"left-most 1"或"right-most 1”的位置,这篇文章就来介绍一下通过德布鲁因序列(De Bruijn sequence)来快速定位的方法。 标记left-most 1与right-most 1 对于一个二进制数v...
德布鲁因序列(De Bruijn sequence),记为B(k, n),是 k 元素构成的循环序列。所有长度为 n 的 k 元素构成序列都在它的子序列(以环状形式)中,出现并且仅出现一次。 例如,序列 00010111 属于B(2,3)。 00010111 的所有长度为3的子序列为000,001,010,101,011,111,110,100,正好构成了 {0,1} 3 的所有组合...
1,德布鲁因序列: B(k, n),是k元素构成的循环序列。所有长度为n的k元素构成序列都在它的子序列(以环状形式)中,出现并且仅出现一次。 例如: 序列00010111属于B(2,3)。 00010111的所有长度为3的子序列为000,001,010,101,011,111,110,100. 长度
德布鲁因序列不仅令人震撼,也具有着重要的应用价值。 德布鲁因序列得名于比利时数学家德布鲁因,他在1939年首次提出了这个概念并进行了深入研究。德布鲁因序列是一个自然数的无限序列,它的生成方法是在前面的数列后面加上该数的二进制编码。具体来说,初始时序列为空,然后每个自然数依次加入序列并通过其二进制编码的方式...
最最常用的德布鲁因序列就是 k = 2 。计算一下 |B(2,n)| 的数量,如下: 4. 生成方式 由于德布鲁因序列并不唯一,所以用代码可以生成其中的任意一种。 def de_bruijn(k, n): ''' de Bruijn sequence for alphabet k and subsequences of length n. ...
大家可以去谷歌一下德布鲁因序列(以下简称DB),估计会出现都是跟一个魔术有关系.奈何笔者也是一个魔术的爱好者,所以顿时超感兴趣.下面就是见证奇迹的时刻(此处应有背景音乐,脑补一下)1,首先要准备一副扑克牌,邀请5个人上来配合一下,(为什么是5个人,因为2的5次幂等于32),检查扑克牌是4个花色从1到8不...