德布鲁因序列

        首先从一个有意思的例子说起。巴尔的摩希尔顿酒店用一种新的密码锁替代了老式的锁。这个新的密码锁由四位0-9的数字组成,由顾客自己约定一个密码就可以按照这个密码打开他房间的锁。但是当顾客忘记自己设置的密码时该怎么办呢?按照排列组合的知识,最坏的情况一共要尝试10000次,即需要按40000次按键。假设只需要输入密码的一个序列中的最后四位对了就可打开这个锁,有没有更简单的办法呢?答案是肯定的,即构造一个序列使其所有的四元组均只出现过一次就行,最坏情况下一共需要10000+3次按键,其中的3次和最开始的3次一样[1]。接下来我们将构造这样的序列,该序列就称之为德布鲁因序列(De Bruijn sequence)。

        德布鲁因序列(De Bruijn sequence),用一般的描述方法就是指一个含有k个元素的表,需要构成一个序列使n元组在这个序列中当且仅当出现一次。举一个简单的例子:下图给出了字母表为元素个数为2的二元组的德布鲁因序列。黄色表示二元组00,红色表示二元组01,绿色表示二元组11,蓝色表示二元组10。这种二元组的构造方式并不唯一。

                                                                                                  

[2]

       德布鲁因序列的长度为k^n。可以做个简单的证明:因为n元组的每个元素的位置中可以出现k种情况,所以一共可以构成k^n个这样的各不相同的n元组。德布鲁因序列的前n个元素是第一个n元组,每往后移动一个元素出现一个新的n元组,移到最后一位时加上序列的前n-1个元素构成最后一个n元组,移动的次数=序列的长度=你元组的个数。

       当知道序列之后可以对原有的所有n元组进行重构,仍取上面图所示为例,如下表所示:

       (0 0) 1 1     ..........(0,0)

        0 (0 1)1     ..........(0,1)

        0 0 (1 1)    ..........(1,1)

        0)0 1 (1     ..........(1,0)

 

       

[1]H. Fredricksen, A survey of full length nonlinear shift register cycle algorithms, Soc. Ind. Appl. Math. Rev. 24 (2) (1982)195–221.

[2]http://en.wikipedia.org/wiki/File:De_Bruijn_sequence.svg

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值