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

文章目录

  • 前言
  • 80.贪心算法(新一章:算法进阶)
  • 81.分数背包
  • 82.分数背包实现
  • 83.数字拼接问题
  • 84.数字拼接问题实现
  • 85.活动选择问题
  • 86.活动选择问题实现
  • 87.贪心算法总结
  • 总结


前言

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

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

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

找零问题:
在这里插入图片描述
从最大的面额找,t默认是倒序的,加入找零376元
【零基础】学python数据结构与算法笔记13-贪心算法_第1张图片
最后3张100,1张50,1张20,一张5,一张1。

81.分数背包

【零基础】学python数据结构与算法笔记13-贪心算法_第2张图片
举例:
【零基础】学python数据结构与算法笔记13-贪心算法_第3张图片
对于0-1背包和分数背包,贪心算法是否都能得到最优解?
对于0-1背包,首先看单位内的商品价值,商品1单价6,商品2单价5,商品3单价4,先拿最贵的商品1,再拿商品2,最后只剩下20kg装不下商品3,最后拿到价值160的商品,但这不是最优的,最优的是220。
而对于分数背包,都能装满,所以可以得到最优解。

82.分数背包实现

w是背包的大小,背包大小/最后商品的重量 为带走的分数(几分之几的商品,比如2/3铜沙)
【零基础】学python数据结构与算法笔记13-贪心算法_第4张图片

83.数字拼接问题

【零基础】学python数据结构与算法笔记13-贪心算法_第5张图片
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内置的函数实现。
这里是降序。

【零基础】学python数据结构与算法笔记13-贪心算法_第6张图片

85.活动选择问题

【零基础】学python数据结构与算法笔记13-贪心算法_第7张图片
贪心结论:最先结束的活动一定是最优解的一部分
【零基础】学python数据结构与算法笔记13-贪心算法_第8张图片
就是说,我找最先结束的就是最优解里的,开始前把活动按照最先结束的时间顺序,升序排序。
先找第一个活动,最后结束是4,那我第二个活动不能找了,它第三个开始的,只能从第4个活动再开始。

86.活动选择问题实现

【零基础】学python数据结构与算法笔记13-贪心算法_第9张图片

87.贪心算法总结

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

总结

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

文章目录

  • 前言
  • 80.贪心算法(新一章:算法进阶)
  • 81.分数背包
  • 82.分数背包实现
  • 83.数字拼接问题
  • 84.数字拼接问题实现
  • 85.活动选择问题
  • 86.活动选择问题实现
  • 87.贪心算法总结
  • 总结


你可能感兴趣的:(python,贪心算法,算法)