动态规划与贪心算法

843 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情

1 动态规划

1.1 最优子结构

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。 在动态规划算法中,利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。

1.2 重叠子问题

在用递归算法自顶向下解此问题时,每次产生的子问题并不总是新问题,有些子问题被重复计算。 动态规划算法正是利用了这种子问题的重叠性质,对每个子问题只解一次,然后将其解保存在一个表格中,当再次需要解此问题时,只是简单地用常数时间查看一下结果。

2 贪心算法

2.1 贪心选择

贪心算法通过一系列选择来得到问题的解,所做的每个选择都是当前状态下局部最好选择。

2.2 贪心选择性质

贪心选择性质是指,所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。

在动态规划算法中,每步所做的选择往往依赖于相关子问题的解。因而只有在解出相关子问题后,才能做出选择。

在贪心算法中,仅在当前状态下做出最好选择,即局部最优选择。再去解做出这个选择后产生的相应的子问题。

2.3 最优子结构性质

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。

贪心选择策略不适用于0-1背包问题

对于0-1背包问题,贪心选择之所以不能得到最优解时因为,在这种情况下,它无法保证最终能将背包装满,部分闲置的背包空间使每千克背包空间的价值降低了。 事实上,在考虑0-1背包问题时,应比较选择该物品和不选择该物品所导致的最终方案,在做出最好选择。由此可导出许多互相重叠的子问题。这正是该问题可用动态规划算法求解的另一重要特征。