【问题标题】:Need help in building efficient exhaustive search algorithm在构建有效的穷举搜索算法方面需要帮助
【发布时间】:2012-08-31 08:18:02
【问题描述】:

有 10 个按钮。如果按正确的顺序(按顺序按 5 次),这些按钮可以解锁。每次按下按钮都会触发解锁检查。

示例:“密码”是 123456,我按下按钮 0 1 2 3 4 5 6 我从第 6 次按下按钮解锁。

我需要设计一种算法,以最有效的方式尝试所有可能的组合(即应按下最少数量的按钮)。

我可以将按钮编号解释为数字,按顺序将按下按钮的编号解释为数字位置,然后尝试所有 99999 种组合以尝试解锁,但我觉得有一种更有效的算法可以做到这一点。

我可以做些什么来优化这个搜索吗?

【问题讨论】:

  • 不 - 详尽搜索是关于搜索所有可能性。您的解决方案似乎没有冗余(没有检查两次组合)并且足够简单。使用整数也很有效。
  • 如果 11223 是一个有效的组合,那么可能是一种优化。如果不是 - 您可以尝试使用重复数字修剪数字。
  • @amit 112233 是一个有效的组合。

标签: algorithm math search combinatorics


【解决方案1】:

要优化对锁的暴力攻击,您可以使用De Bruijn sequences

该序列可用于缩短对类似 PIN 码的密码锁的暴力攻击,该密码锁没有“输入”键并接受输入的最后 n 位数字。例如,具有 4 位密码的数字门锁将具有 B(10, 4) 解,长度为 10,000。因此,最多只需要 10,000 + 3 = 10,003 次(因为解是循环的)按压来打开锁。分别尝试所有代码需要 4 × 10,000 = 40,000 次印刷。

【讨论】:

  • 谢谢,这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多