举一个例子,说明贪心法和动态规划算法的解题区别
时间: 2023-07-04 11:08:47 浏览: 147
假设现在有一个背包问题:有一个背包容量为 C,有 n 个物品,每个物品有一个重量 w 和一个价值 v。要求在背包容量不超过 C 的前提下,选择一些物品放入背包中,使得背包中物品的总价值最大。
贪心算法的解法是优先选择单位重量价值最高的物品放入背包中,直到背包装不下为止。
动态规划算法的解法是建立一个二维数组 dp[i][j],表示前 i 件物品放入容量为 j 的背包中所能获得的最大价值。则状态转移方程为:
```
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])
```
其中,dp[i-1][j] 表示不选择第 i 件物品时的最大价值,dp[i-1][j-w[i]]+v[i] 表示选择第 i 件物品时的最大价值。
区别在于,贪心算法只考虑当前的最优解,而不考虑之后的情况。而动态规划算法则考虑了所有可能的情况,并且保存了之前的计算结果,避免了重复计算。因此,当问题具有最优子结构和重叠子问题时,动态规划算法可以获得最优解,而贪心算法则不一定能够获得最优解。
阅读全文