蛮力的最佳顺序解决了键盘代码锁定问题

时间:2012-11-05 15:06:46

标签: algorithm

  

可能重复:
  Need help in building efficient exhaustive search algorithm

想象一下,您必须通过在键盘上输入正确的4位数代码来打开锁定的门。在每次按键后,锁定评估输入的最后4位数的序列,,输入123456您已评估3个代码:12342345和{{ 1}}。

  • 评估所有3456种不同组合的最短按键顺序是什么?
  • 是否有一种方法可以轻松遍历整个空间以供人类使用?

我不时地思考这个问题,因为我的一个朋友不得不蛮力锁定这个锁,不必在冬天在户外过夜。


我绕着它微弱地试图

使用长度为10^4个数字的代码和大小为L=4的数字的“字母”,最佳序列的长度不能短于D=10。在比D^L + L - 1更小的模拟中,我通过半随机搜索空间获得了最佳结果。但是,我不知道是否存在任意[L,D] = [4,10]对的解决方案,如果我不得不使用它,将无法记住解决方案。

到目前为止的经验教训

如果计划在另一个城镇的朋友家过夜,请务必在凌晨1点到达,如果该人出去参加派对而且不会听到她的手机。

2 个答案:

答案 0 :(得分:3)

我想你想要一个http://en.wikipedia.org/wiki/De_Bruijn_sequence - “给定字母A的循环序列,其大小为k,A中长度为n的每个可能子序列都只显示一个连续字符序列。”

答案 1 :(得分:2)

Evgeny提供的链接应该回答你的任务。这个答案有点偏离,但你要求人类解决方案。

在现实世界中,你应该更多地依赖Social engineeringheuristics,然后依靠数学。我举一个关于现实生活的案例:

我去了一间公寓,发现我的手机坏了。现在联系进行访问的人的方式。当我看到门使用键盘0 - 9A B时,我正要回去。我做了几个假设:

  1. 代码长度为5位数。长度是相当标准的,取决于你所在的地区。我基于这个假设我以前访问过的建筑物(合法地:D)。
  2. 代码以数字开头,然后是AB(基于我自己的建筑物)。
  3. 键盘不是全新的。结论,代码中使用的数字有点受损。我确切地知道代码中没有哪些数字,以及代码中的四个数字中的三个(根据我先前的假设)
  4. 根据损坏的密钥数量,我认为代码没有包含重复的密钥(7个已损坏,很明显A被使用,B未使用)
  5. 最后我有3个数字在代码中肯定,2个候选人在最后一个数字,我确信A在最后。关键是与其他人相比略有损坏。

    我只需要枚举从候选人开始的排列,这些排名看起来更受损,这让我4! + 4! = 48次尝试。相信我,在第5次尝试门打开了。如果我能给出2美分,那么旧的put a key and open the door仍然是限制访问建筑物的最可靠方法。