动态规划 vs 回溯17 Mar 2025 | 4 分钟阅读 在理解动态规划和回溯法之间的区别之前,我们应该分别了解动态规划和回溯法。 什么是回溯法?回溯法是一种问题解决技术。使用这种技术,我们可以解决我们的问题。这种策略使用暴力破解法,暴力破解法表示对于给定的问题,我们应该尝试所有可能的解决方案,并从所有可能的解决方案中选择所需的解决方案。相比之下,动态规划用于解决优化问题,但回溯法不用于解决优化问题。当给定问题存在多个解决方案时,回溯法会使用所有解决方案来解决问题。 现在我们将通过一个例子来理解动态规划如何使用暴力破解法。 假设有三名学生,两名女生,一名男生。我们有三把椅子,我们必须将这些学生安排在这些椅子上。我们有多少种方式可以安排这些学生?由于有 3 名学生,我们可以以 3!种方式安排这些学生,即 6 种方式。现在,我们必须找出所有可能的安排,所有这些安排或解决方案可以以树的形式表示,称为状态空间树。 G1、G2、B1 状态空间树 第一次安排 首先,考虑一个如下图所示的节点 ![]() 考虑第一层中的第一个女孩 G1,即如下图所示的第一把椅子 考虑下一层中的第二个女孩 G2,即如下图所示的第二把椅子 考虑下一层中的一个男孩 B1,即如下图所示的第三把椅子 ![]() 第二次安排 我们将回溯。首先,我们从第三把椅子上移除 B1,从第二把椅子上移除 G2。将 B1 添加到第二把椅子,然后将 G2 添加到第三把椅子,如下图所示 ![]() 第三次安排 我们将再次回溯。首先,我们从第三把椅子上移除 G2,然后从第二把椅子上移除 B1,然后从第一把椅子上移除 G1。考虑第一把椅子上的 G2,如下图所示 考虑下一层中的 G1,即如下图所示的第二把椅子 考虑第三层中的 B1,即如下图所示的第三把椅子 ![]() 第四次安排 我们将再次回溯。首先,我们从第三把椅子上移除 B1,然后从第二把椅子上移除 G1。将 B1 添加到第二把椅子,然后将 G1 添加到第三把椅子,如下图所示 ![]() 第五次安排 我们将再次回溯。首先,我们从第三把椅子上移除 G1,然后从第二把椅子上移除 B1,然后从第一把椅子上移除 G2。 考虑第一层中的 B1,即如下图所示的第一把椅子 考虑下一层中的 G1,即如下图所示的第二把椅子 考虑下一层中的 G2,即如下图所示的第三把椅子 ![]() 第六次安排 我们将再次回溯。首先,我们从第三把椅子上移除 G2,然后从第二把椅子上移除 G1。将 G2 添加到第二把椅子,然后将 G1 添加到第三把椅子,如下图所示 ![]() 什么是动态规划?动态规划是一种通过将复杂问题分解为更简单的子问题并精确地解决每个问题一次来高效解决某些类型复杂问题的技术。动态规划将子问题的结果存储在表中,并在需要时重新使用它们,以避免重复解决相同的问题。 哪些类型的问题可以使用动态规划解决? 以下是可以使用动态规划解决的两个问题
使用动态规划方法,我们避免解决重叠子问题,并且我们只解决每个问题一次并将结果保存在缓存中。当再次需要时,我们将从缓存中获取结果,而不是再次解决它们。 动态规划的方法 有两种方法用于实现动态规划
动态规划与回溯法之间的区别![]()
下一个主题暴力破解法 |
我们请求您订阅我们的新闻通讯以获取最新更新。