采用强力方法的算法/方法是什么?

时间:2012-09-05 06:46:21

标签: java algorithm

在SO上阅读making unique combinations from the given characters时,我想知道这是使用 Brute-Force 方法的程序应用的技术吗?我的意思是制作92个组合来打破用户ID或密码。典型的Windows键盘有大约92个字符,可用于密码。

我不是问这个方法如何破解密码,但是想知道一些复杂程序用于 Brute-Force 方法的方法?

1 个答案:

答案 0 :(得分:3)

使用暴力解决问题的朴素方式确实是一个简单的backtracking,它探索所有可能性,评估它们,并选择最佳。

然而,对于某些问题 - 您可能会有更多信息,然后“它解决它”或“它无法解决它”。例如,对于SAT问题(查找布尔公式是否有解决方案) - 您可以获得“如何得到矛盾”的知识(哪些变量不能满足分配)。通常我们将此问题称为约束传播。它适用于DPLL算法下的SAT,该算法经常用于SAT求解器(在变体中)。
如果您感兴趣 - 使用SAT求解器的现实生活程序是各种各样的,Software verification算法是使用SAT求解器以便证明软件(或更常见的硬件)的一个示例)正在按预期工作。

另一个常见的优化是{{​​3}} - 意思是,您可以在到达树叶之前修剪“搜索树”。一个例子是Branch and Bound。如果您已找到长度为100的路径,并且您正在探索新路径,并且达到101,则无需继续探索这种可能性。