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