贪心算法
实质:直接去求每一步的最优解,通过若干次的贪心选择,从而得到整个问题的最优解。(不是整体上考虑问题,而是找局部的最优解)
利用贪心解题策略:
- 判断该题是否适用于贪心策略求解;
- 如何选择贪心标准,以得到问题的最优解;
贪心的一般解题思路:
(1)候选集合A
(2)解集合S
(3)解决函数solution
(4)选择函数select
(5)可行函数feasible
举例:
- 给定一个载重量为M的背包,考虑n个物品,其中第i个物品的重量 ,价值wi (1≤i≤n),要求把物品装满背包,且使背包内的物品价值最大。
- 有两类背包问题(根据物品是否可以分割),如果物品不可以分割,称为0—1背包问题(动态规划);如果物品可以分割,则称为背包问题(贪心算法)。
分析:
该题的最优解思路是:先将物品的价值比求出来;进行排序,然后在剩余重量足够容纳下最大价值比的前提下,向背包中装物品。直到装到不能装下价值比最大的那个为止,对这个物品进行切割背包所能容纳下的重量的物品。即可达到最大价值。