贪心算法
定义
贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择,也就是,不从整体上加以考虑,他做出的仅是在某种意义上的局部最优解
贪心法产生最优解的条件
要判断一个问题是否可以用贪心算法求解,一般看两个重要的性质:贪心的选择性与最优子结构性质
贪心的选择性
若一个优化问题的全局最优解可以通过局部最优解得到,则该问题具有贪心选择性。一个问题是否具有贪心选择性需要证明。
贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择得到,这个是贪心算法可行的第一个基本要素。
动态规划通常以自底向上的方式解各个子问题,而贪心算法则通常以自顶向下的方式进行。
最优子结构
若一个优化问题的优化解,包含它的子问题的优化解,则称其具有最优子结构。
最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。
贪心的正确性证明
证明步骤
- 叙述一个有关自然数n的命题,该命题断定该贪心策略的执行最终将导致最优解,其中自然数n可以代表算法步数或者问题规模
- 证明命题对所有的自然数为真
- 归纳基础
- 从最小实例规模开始
- 归纳步骤
- 第一数学归纳法
- 第二数学归纳法
- 归纳基础
贪心的应用
- 活动安排问题
- 结束时间早的优先
- 最优装载问题
- 重量轻的优先
- 最优前缀及哈夫曼算法