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

Bac*_*lin 6 algorithm

可能重复:
需要帮助构建有效的穷举搜索算法

想象一下,您必须通过在键盘上输入正确的4位数代码来打开锁定的门.在每次按键后,锁定会评估输入的最后4位数字的顺序,通过输入123456您已经评估了3个代码:1234,23453456.

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

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


我微弱地试图缠绕它

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

到目前为止的经验教训

当计划在另一个城镇的朋友家过夜时,如果那个人出去参加聚会并且不会听到她的手机,请务必在凌晨1点到达.

mcd*_*lla 5

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


UmN*_*obe 3

Evgeny 提供的链接应该可以回答您的两个问题。这个答案有点题外话,但你是在为人类寻求一个解决方案。

在现实世界中,您可能应该更多地依赖社会工程启发法,然后才是数学。我举一个现实生活中的案例:

我去参观一间公寓,发现我的手机没电了。现在联系访问者的方式。我正要回去,却看到门上用的是键盘,0 - 9而且A B…… 我做了几个假设:

  1. 代码长度为 5 位。根据您所在的区域,长度是相当标准的。我基于我之前访问过的建筑物(合法:D)来做出这个假设。
  2. 代码以数字开头,然后是AB(基于我自己的建筑)。
  3. 键盘不是全新的。结论是,代码中使用的数字有点损坏。我确切地知道哪些数字不在代码中,以及代码中四个数字中的三个(鉴于我之前的假设)
  4. 根据损坏的密钥数量,我假设代码不包含重复的密钥(7 个被损坏,很明显A被使用过,B未使用过)

最后我得到了 3 个数字,这些数字肯定在代码中,最后一个数字有 2 个候选数字,我确信A在最后。与其他按键相比,按键仅略有损坏。

我只需从看起来受损更严重的候选者开始列举排列,这给了我4! + 4! = 48尝试的机会。相信我,在第五次尝试时,门就打开了。如果我能给我 2 美分的话,旧的方法put a key and open the door仍然是限制进入建筑物的最可靠的方法。