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