【零基础】学python数据结构与算法笔记13-贪心算法

文章介绍了贪心算法的基本思想,通过分数背包问题说明在某些情况下贪心算法能获得最优解,探讨了数字拼接问题的解决方案,并通过活动选择问题展示贪心策略的应用。同时,指出贪心算法在0-1背包问题上的局限性,预示动态规划的引入。
摘要由CSDN通过智能技术生成


前言

学习python数据结构与算法,学习常用的算法,
b站学习链接

80.贪心算法(新一章:算法进阶)

贪心算法(又称贪婪算法)是指,对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法并不保证会得到最优解,但是在某些问题上贪心算法的解就是最优解。要会判断一个问题能否用贪心算法来计算。

找零问题:
在这里插入图片描述
从最大的面额找,t默认是倒序的,加入找零376元
在这里插入图片描述
最后3张100,1张50,1张20,一张5,一张1。

81.分数背包

在这里插入图片描述
举例:
在这里插入图片描述
对于0-1背包和分数背包,贪心算法是否都能得到最优解?
对于0-1背包,首先看单位内的商品价值,商品1单价6,商品2单价5,商品3单价4,先拿最贵的商品1,再拿商品2,最后只剩下20kg装不下商品3,最后拿到价值160的商品,但这不是最优的,最优的是220。
而对于分数背包,都能装满,所以可以得到最优解。

82.分数背包实现

w是背包的大小,背包大小/最后商品的重量 为带走的分数(几分之几的商品,比如2/3铜沙)
在这里插入图片描述

83.数字拼接问题

在这里插入图片描述
94 和32比的话 很好比,位数相同94>32 就把94放前面
128 和1286比 1286128 1286在前
728和7286比 7287286 728在前
位数不同就不好比,可以转换一下思路,看哪个拼接后大就用哪个
a+b if a+b>b+a else b+a

84.数字拼接问题实现

也可以按照上面的思路自己用冒泡法交换排序,这里用了python内置的函数实现。
这里是降序。

在这里插入图片描述

85.活动选择问题

在这里插入图片描述
贪心结论:最先结束的活动一定是最优解的一部分
在这里插入图片描述
就是说,我找最先结束的就是最优解里的,开始前把活动按照最先结束的时间顺序,升序排序。
先找第一个活动,最后结束是4,那我第二个活动不能找了,它第三个开始的,只能从第4个活动再开始。

86.活动选择问题实现

在这里插入图片描述

87.贪心算法总结

这些问题求解的都是最优解,最多,最大问题
而这些不能解决的,比方说0-1背包问题,我们下次讲动态规划来实现。

总结

学习了贪心算法的4个例子


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值