贪心算法

贪心算法

贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心选择:一系列局部最优的选择

但局部最优解并不一定是整体最优解,为此在应用贪心算法时,必须证明整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。
也就是每次选取局部最优解,最后得到的一定是整体最优解

举个栗子

举个局部最优解不是是整体最优解的例子 ,毕竟没有例子,纯看理论总是会有点懵。

背包问题
有一个背包,背包容量是M=150kg。有7个物品,物品不可以分割成任意大小。要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
物品 A B C D E F G
重量 35 30 6 50 40 10 100
价值 10 40 30 50 35 40 100

:首先选择贪心策略,贪心策略是自己选择的,在这里很多人都会有不同的选择

  • 策略1:每次挑选价值最大的物品装入背包。遍历,重量充足时,直接放入物品,对于这道题可以直接放入价值在10,40,30,50的物品,此时总重量是121。下一个是价值35,重量40的物品,此时不能直接放入,因为重量不够。因此可以价值为10的物品替换。此时背包含有35,40,30,50价值的物品,总重量是126。下一个物品和价值30替换。
    此时背包含有35,40,40,50价值的物品,
    其重量是分别40,10,30,50,总重量130。最后一个物品不可换入,因为100和35+40的物品替换,重量130-40-10+100=180>150。因此最终结果为35,40,40,50。总价值165。
    但很明显选择价值100,40,30的物品总价值170,总重量116,则说明上述策略错误

  • 策略2:每次挑选所占重量最小的物品装入

  • 策略3:每次选取单位重量价值最大的物品
    上述的几个策略都存在反例。即 无法证明每次选取局部最优解,最后得到的一定是整体最优解
    所有对于本题贪心算法可能比较难找到合适的贪心策略。但该题可用DP动态规划解决。

正例:
最小生成树的Prim算法和Kruskal算法都是漂亮的贪心算法。
贪心法的应用算法有Dijkstra的单源最短路径和Chvatal的贪心集合覆盖启发式
所以需要说明的是,贪心算法可以与随机化算法一起使用,具体的例子就不再多举了。
其实很多的智能算法(也叫启发式算法),本质上就是贪心算法和随机化算法结合——这样的算法结果虽然也是局部最优解,但是比单纯的贪心算法更靠近了最优解。例如遗传算法,模拟退火算法。

参考资料:百度百科

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值