贪心算法:
声明:此文档是由重庆八中郭茂老师制作
1、什么是贪心算法:
**贪心算法(又称贪婪算法,Greedy Algorithm)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。**
2、基本思路
(1)把求解的问题分成若干个子问题。
(2)对每一子问题求解,得到子问题的局部最优解。
(3)把子问题的解局部最优解合成原来解问题的一个解。
3、算法实现。
(1)从问题的某个初始解出发。
(2)采用循环语句,当可以向求解目标前进一步时,就根据局部最优策略,得到一个部分解,缩小问题的范围或规模。
(3)将所有部分解综合起来,得到问题的最终解。
贪心方法的基本思想
贪心是一种解题策略,也是一种解题思想
使用贪心方法需要注意局部最优与全局最优的关系,选择当前状态的局部最优并不一定能推导出问题的全局最优
利用贪心策略解题,需要解决两个问题:
该题是否适合于用贪心策略求解
如何选择贪心标准,以得到问题的最优解
【引例】
在一个N×M的方格阵中,每一格子赋予一个数(即为权),规定每次移动时只能向上或向右。现试找出一条路径,使其从左下角至右上角所经过的权之和最大。
我们以2×3的矩阵为例:
若按贪心策略求解,所得路径为:1→3→4→6;
若按动态规划求解,所得路径为:1→2→10→6。
贪心法的特点
1.贪心选择性质:算法中每一步选择都是当前看似最佳的选择,这种选择依赖于已做出的选择,但不依赖于未做的选择。
2.最优子结构性质:算法中每一次都取得了最优解(即局部最优解),要保证最后的结果最优,则必须满足全局最优解包含局部最优解。
但并不是所有具有最优子结构的问题都可以用贪心策略求解。因为贪心往往是盲目的,需要使用更理性的方法——动态规划(例如“0-1背包问题”与“部分背包问题”)