文章目录
- 前言
- 80.贪心算法(新一章:算法进阶)
- 81.分数背包
- 82.分数背包实现
- 83.数字拼接问题
- 84.数字拼接问题实现
- 85.活动选择问题
- 86.活动选择问题实现
- 87.贪心算法总结
- 总结
前言
学习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个例子
文章目录
- 前言
- 80.贪心算法(新一章:算法进阶)
- 81.分数背包
- 82.分数背包实现
- 83.数字拼接问题
- 84.数字拼接问题实现
- 85.活动选择问题
- 86.活动选择问题实现
- 87.贪心算法总结
- 总结