5.1基本原理
基本概念:
基本思想:
- 求解最有优化问题的算法 包含一系列步骤
- 每一步都有一组选择
- 作出在当前看来最好的选择
- 希望通过作出局部优化选择 达到全局优化选择
- 贪心算法不一定总产生优化解
- 贪心算法是否产生优化解,需严格证明
贪心算法产生优化解的条件:
- 贪心选择性
- 若一个优化问题的全局优化解可以通过局部优化选择得到,则该问题称为具有 贪心选择性
- 优化子结构
- 若一个优化问题的优化解包含它的子问题的优化解,则称 具有 优化子结构。
与动态规划方法的比较:
动态规划方法可用的条件:
- 优化子结构
- 子问题重叠性
- 子问题空间小
贪心方法可用的条件:
- 贪心选择性
- 优化子结构
证明贪心算法正确性:
- 证明算法所求解的问题具有 贪心选择性
- 证明算法所求解的问题具有 优化子结构
- 证明算法 确实按照贪心选择性进行局部优化选择
5.2任务安排问题
问题的定义:
优化解结构分析
一定包含终止时间最早的那个活动
--反证法
优化子结构:在优化解里面,去掉贪心选出来的东西,剩下的部分仍然是它所对应的子问题的优化解。
A和A1写反了
算法的设计
复杂性:
5.3哈夫曼编码
问题的定义:
二进制字符编码:每个字符用一个二进制0、1 串来表示。
固定长编码:每个字符用相同长的0、1 串表示。
可变长编码:经常出现的字符用短码,不经常出现的字符用长码,
前缀编码:无任何字符的编码是另一个字符编码的前缀。
编码树:
贪心思想:
循环地选择具有最低频率的两个结点,生成一个子树,直至形成树。