楼主对问题的描述还不是太清楚,看看我理解的对不对:
有一个6位数密码,每一位均从1~6这六种数字之一选择
有一个密码输入装置,它只能容纳6个数字的输入。当你输入6个数字的时候,会对目前位于输入框内的6个数字检测它是不是密码,如果和密码吻合,密码就破解成功了
但是仅输入6个数字就猜对的概率太低了,这个密码输入装置还有一个特点,就是在输入6个数字后继续输入,新输入的1个数字会接在上一次输入的数字之后,并把最早输入的那个数字“挤出去”,也就是楼主在1楼介绍的规则,此时装置会再次检测当前的6个数字是否和密码吻合。也就是说,当输入6个数字之后,每再次输入1个数字,装置都会检查1次当前的数字是否和密码吻合
因此可以构造一个长度是5+x的输入序列,让装置检查x次,只要这x次中有一次和密码吻合,我们就破解了这个密码
比如说12345561这个输入序列,会依次检测123455, 234556和345561这三个是否和密码吻合
现在的问题是,如何设计输入序列,使得无论密码是什么,能够保证一定能猜出密码的同时,让x最小
为了将问题形式化,定义x=B(k,n),这里k是每位密码可能选择的数字种类,n是密码的位数。对于这个问题,x=B(6,6)
举个容易理解的例子,对于B(2,2),也即密码共两位,每位密码从两种数字中选(比如说0和1),则最优的序列(之一)是00110,根据装置的特点,会依次检测00,01,11,10,它遍历了密码的所有情况,所以一定能猜出任意一种密码,同时它一定是最短的,因为每种情况恰好遍历一次,再短的话就无法保证猜出任意密码了
这个问题的解法和“德布鲁因序列”有关,楼主感兴趣的话可以搜索这个关键词