目录
一、什么是贪心算法?
二、贪心算法的特点
三、贪心算法解决找零问题、最短路径问题、背包问题
1.找零问题
2.最短路径问题
3.背包问题
一、什么是贪心算法?
贪心算法就是希望通过局部最优来解决全局最优
基本步骤:1.将问题分为若干步
2.解决每一步都选择“看起来”最优的算法
3.“希望”通过局部最优最终得到全局最优
二、贪心算法的特点
1.贪心算法的策略没有标准与模板,每一题的贪心策略可能都不同
2.贪心算法的正确性不能确定(这就是基本步骤中2会说 选择“看起来”最优的算法 和基本步骤中3会说 “希望”得到全局最优的原因)
三、贪心算法解决找零问题、最短路径问题、背包问题
1.找零问题
用50元买4元的东西,商家有20、10、5、1元的纸币,如何用最少张数的纸币找零钱?
50-4=46元,需要找46元的零钱。
根据生活经验来提出贪心策略:要用最少张数的纸币,首先一定需要用面额最大的纸币,先选出2张20元的纸币,再选出1张5元纸币,最后选出1张1元纸币,一共是4张纸币
2.最短路径问题
从下图左上角走到右下角,只能向下或者向右走,找出最短路径
根据题意提出贪心策略:一次走一步,每一步选择最短的路径,最终得出的路径为1-1-6-1-1(这并不是真正的答案,但是由贪心策略得出来的结果确实是这样,这就是贪心算法的特点,正确性不能确定)
3.背包问题
有一个最大体积为8的背包,找出可以背物品总价值最大的方案
根据体积最小(背得多)提出贪心策略:背8个1号物品,总价值为1*8=8
根据价值最高(价值高)提出贪心策略:背1个1号物品,3个3号物品,总价值为10+1+1+1=13
根据单位体积价值最高提出贪心策略:背1个1号物品,3个3号物品,总价值为10+1+1+1=13
(这三种方案其实都不对,但确实是由贪心算法得出的结果,这也验证了贪心算法的特点:正确性不能确定)