暴力破解方法

2025年3月17日 | 阅读 3 分钟

暴力方法是一种寻找所有可能解决方案以找到给定问题的满意解决方案的方法。暴力算法会尝试所有可能性,直到找到满意的解决方案。

这种算法可以分为两种类型

  • 优化: 在这种情况下,将找到最佳解决方案。 为了找到最佳解决方案,它可能会找到所有可能的解决方案以找到最佳解决方案,或者如果已知最佳解决方案的值,它会在找到最佳解决方案时停止查找。 例如:寻找旅行商问题的最佳路径。 这里最佳路径是指遍历所有城市,并且旅行成本应为最低。
  • 满意: 找到满意解后,它会立即停止寻找解。 例如,找到旅行商路径,该路径在最优路径的 10% 之内。
  • 通常,暴力算法需要指数时间。 可以使用各种启发式方法和优化方法
  • 启发式方法: 一种经验法则,可帮助您决定我们应该首先查看哪些可能性。
  • 优化: 在不探索所有可能性的情况下消除某些可能性。

让我们通过一个例子来理解暴力搜索。

假设我们已将问题转换为如下所示的树形式

Brute force approach

暴力搜索会考虑树的每一个状态,并且状态以节点的形式表示。 就起始位置而言,我们有两个选择,即 A 状态和 B 状态。 我们既可以生成 A 状态,也可以生成 B 状态。 在 B 状态的情况下,我们有两个状态,即 E 状态和 F 状态。

在暴力搜索的情况下,每个状态都会被逐个考虑。 如我们在上面的树中观察到的那样,暴力搜索需要 12 步才能找到解决方案。

另一方面,使用深度优先搜索的回溯只会在状态提供可行解决方案时才考虑以下状态。 考虑上述树,从根节点开始,然后移动到节点 A,然后移动到节点 C。 如果节点 C 没有提供可行的解决方案,那么考虑状态 G 和 H 就毫无意义。 我们从节点 C 回溯到节点 A。 然后,我们从节点 A 移动到节点 D。 由于节点 D 未提供可行的解决方案,我们放弃此状态并从节点 D 回溯到节点 A。

我们移动到节点 B,然后从节点 B 移动到节点 E。 我们从节点 E 移动到节点 K; 由于 k 是一个解决方案,因此需要 10 步才能找到解决方案。 这样,我们在一个迭代中消除了大量状态。 因此,我们可以说回溯比暴力方法更快、更有效。

暴力算法的优点

以下是暴力算法的优点

  • 此算法会找到所有可能的解决方案,并且它还保证找到问题的正确解决方案。
  • 这种类型的算法适用于广泛的领域。
  • 它主要用于解决更简单和较小的问题。
  • 它可以被视为解决简单问题的比较基准,并且不需要任何特定的领域知识。

暴力算法的缺点

以下是暴力算法的缺点

  • 它是一种效率低下的算法,因为它需要解决每个状态。
  • 它是一种非常慢的算法,用于找到正确的解决方案,因为它解决了每个状态,而没有考虑解决方案是否可行。
  • 与其他算法相比,暴力算法既没有建设性也没有创造性。