有10个按钮。如果按正确的顺序(按顺序按 5 次),这些按钮可以解锁。每次按下按钮都会触发解锁检查。
示例:“密码”是 123456,我按下按钮 0 1 2 3 4 5 6 我从第 6 次按下按钮解锁锁。
我需要设计一种算法,以最有效的方式尝试所有可能的组合(即应该按下最少数量的按钮)。
我可以将按钮编号解释为数字,按顺序将按下按钮的编号解释为数字位置,然后尝试所有 99999 种组合以尝试解锁,但我觉得有一种更有效的算法可以做到这一点。
我可以做些什么来优化这个搜索吗?
有10个按钮。如果按正确的顺序(按顺序按 5 次),这些按钮可以解锁。每次按下按钮都会触发解锁检查。
示例:“密码”是 123456,我按下按钮 0 1 2 3 4 5 6 我从第 6 次按下按钮解锁锁。
我需要设计一种算法,以最有效的方式尝试所有可能的组合(即应该按下最少数量的按钮)。
我可以将按钮编号解释为数字,按顺序将按下按钮的编号解释为数字位置,然后尝试所有 99999 种组合以尝试解锁,但我觉得有一种更有效的算法可以做到这一点。
我可以做些什么来优化这个搜索吗?
要优化对锁的蛮力攻击,您可以使用De Bruijn 序列。
该序列可用于缩短对类似 PIN 码的密码锁的暴力攻击,该密码锁没有“输入”键并接受输入的最后 n 位数字。例如,具有 4 位密码的数字门锁将具有 B(10, 4) 解,长度为 10,000。因此,最多只需要 10,000 + 3 = 10,003 次(因为解是循环的)按压来打开锁。分别尝试所有代码需要 4 × 10,000 = 40,000 次印刷。