dp和dfs的区别与联系

核心思想的区别

DFS (Depth-First Search)本质:暴力枚举。

它像走迷宫,选一条路一直走到黑(递归到底),如果没有路了,就回退一步(回溯),换一条路再走。
关注点:过程。
它关注“我现在怎么走?下一步去哪?”挖地雷中的DFS:比如从地窖1出发,先试 \(1 \to 2 \to 4\),算出总数;然后回溯到2,试 \(1 \to 2 \to 5\)... 它会把所有可能的路线都跑一遍。

DP (Dynamic Programming)本质:递推与复用。

把大问题拆成小问题,并且记下小问题的答案。如果下次遇到同一个小问题,直接查表,不再重新算。(图表法)
关注点:结果(状态)。
它关注“到达第 \(i\) 个点时,最好的结果是多少?”挖地雷中的DP:到达地窖4时,我只关心“从哪里走到4地雷最多(是从2来还是从3来?)”,选一个最大的存下来。以后不管谁问地窖4的情况,我都直接告诉他这个最大值,不用再倒回去重走。

效率的区别

假设有一个图,很多条路都能汇聚到同一个点 \(X\),然后再从 \(X\) 走向终点。

DFS(纯递归)的问题:重复计算。

路径 A 走到了 \(X\),DFS 会继续把 \(X\) 后面的路全走一遍。
路径 B 也走到了 \(X\),DFS 会再次把 \(X\) 后面的路全走一遍。

时间复杂度:通常是指数级 \(O(2^N)\),数据大一点(比如 \(N=50\))就会超时。

DP 的优势:消除重叠子问题。

路径 A 走到 \(X\) 时,算出 \(X\) 后面的最优解,存在 dp[X] 数组里。
路径 B 走到 \(X\) 时,发现 dp[X] 已经有数了,直接拿来用,不用往下走了。
时间复杂度:通常是多项式级 \(O(N^2)\)\(O(N)\),非常快。

适用场景的区别

image

联系

DFS + 备忘录 = DP
posted on 2025-12-08 20:17  九十镹  阅读(28)  评论(0)    收藏  举报