贪心算法
在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,做出的是某种意义上的局部最优解。
思想
- 建立数学模型来描述问题;
- 把求解的问题分成若干个子问题;
- 对每个子问题求解,得到子问题的局部最优解;
- 把子问题的解局部最优解合成原来解问题的一个解。
要素
- 贪心的选择
- 仅仅依据当前已有的信息做出选择,并且以后都不会改变这次选择。(区别与动态规划)
- 最优子结构
- 当一个问题的最优解包括其子问题的最优解时,称此问题具有最优子结构性质。
- 这个性质和动态规划的一样,最优子结构性质是可用动态规划算法或贪心算法求解的关键特征。
典型应用
- 背包问题
- Huffman编码
- 单源最短路径
- prim算法
- kruskal算法
例题