可能重复:
需要帮助构建有效的穷举搜索算法
想象一下,您必须通过在键盘上输入正确的4位数代码来打开锁定的门.在每次按键后,锁定会评估输入的最后4位数字的顺序,即通过输入123456您已经评估了3个代码:1234,2345和3456.
10^4不同组合的最短按键顺序是什么?我不时地思考这个问题,因为我的一个朋友不得不蛮力锁定这种锁,不必在冬天在户外过夜.
使用长度L=4数字代码和大小数字的"字母",D=10最佳序列的长度不能短于D^L + L - 1.在比[L,D] = [4,10]我更小的模拟中通过半随机搜索空间获得最佳结果.但是,我不知道是否存在任意[L,D]对的解决方案,如果我不得不使用它,将无法记住解决方案.
当计划在另一个城镇的朋友家过夜时,如果那个人出去参加聚会并且不会听到她的手机,请务必在凌晨1点到达.
我想你想要一个http://en.wikipedia.org/wiki/De_Bruijn_sequence - “一个给定字母 A 的循环序列,大小为 k,其中 A 中每个可能的长度为 n 的子序列都作为连续字符序列出现一次.”
Evgeny 提供的链接应该可以回答您的两个问题。这个答案有点题外话,但你是在为人类寻求一个解决方案。
在现实世界中,您可能应该更多地依赖社会工程或启发法,然后才是数学。我举一个现实生活中的案例:
我去参观一间公寓,发现我的手机没电了。现在联系访问者的方式。我正要回去,却看到门上用的是键盘,0 - 9而且A B…… 我做了几个假设:
A或B(基于我自己的建筑)。A被使用过,B未使用过)最后我得到了 3 个数字,这些数字肯定在代码中,最后一个数字有 2 个候选数字,我确信A在最后。与其他按键相比,按键仅略有损坏。
我只需从看起来受损更严重的候选者开始列举排列,这给了我4! + 4! = 48尝试的机会。相信我,在第五次尝试时,门就打开了。如果我能给我 2 美分的话,旧的方法put a key and open the door仍然是限制进入建筑物的最可靠的方法。