python之贪婪算法
贪婪算法
贪婪算法也称为最优算法,这种算法并不是最准确的答案,但确认最接近答案的近似算法。
这时候有人会问,不是最准确的答案我要她干嘛?但是在日常中,我们有时候会遇到一些我们无法处理的问题,甚至是要花费成吨的资源也无法很好解决的问题
这时候我们可以考虑使用近似算法,来节约资源这种简单方法解决
假如我们现在很富有,家里有好多地皮造房子,这时候你需要找最少的施工队伍去帮我们同时造房子
用贪婪算法我们要做的非常简单,只要两步:
(1) 选出这样一个施工队伍,即可以覆盖了最多的未覆盖地皮。即便这个施工队伍覆盖了一些已覆盖的地皮,也没有关系。
(2) 重复第一步,直到覆盖了我家所有的地皮。
我用拥有["杨浦","徐汇","崇明","虹口","黄浦","普陀","闵行","宝山"]地皮,为什么用set集合呢,因为我们每个区里有好几处地皮,用set可以帮助我们去重
现在一共有4个施工队伍,每个队伍负责的区域如下我放在一个字典里
house_haved =set( ["杨浦","徐汇","崇明","虹口","黄浦","普陀","闵行","宝山"] ) constructionTeam = {"one":set(["杨浦","徐汇","崇明"]),"two":set(["崇明","虹口","黄浦"]),"three":set(["虹口","黄浦"]),"four":set(["虹口","普陀","闵行","宝山"])}
创建一个用过存放最终结果的集合
final_teams=set()
循环取队伍判断能覆盖最多未覆盖的地区的队伍
每次for循环结束把队伍加入到最终结果里,再从拥有的地皮集合中减去已经覆盖到的地区,一直到所有房屋都被覆盖了(house_haved为空)
取house_haved和team_cover的交集和best_covered比较, 循环出best_covered
while house_haved : best_team=None best_covered = set() for team , team_cover in constructionTeam.items(): covered = house_haved & team_cover if len(covered) > len(best_covered): best_team = team best_covered = covered final_teams.add(best_team) house_haved -= best_covered
作者: yetangjian
出处: https://www.cnblogs.com/yetangjian/p/16274189.html
关于作者: yetangjian
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(yetangjian@outlook.com)咨询.