《算法图解》第八章 贪婪算法

第八章 贪婪算法

目录

8.1教室调度问题

8.2背包问题

8.3集合覆盖问题

近似算法

8.4NP-Hard完全问题

8.4.1旅行商问题详解

8.4.2如何识别NP-hard完全问题

8.5小结

8.1教室调度问题

有很多门课,上课的时间和时长可能会交叉,那要怎么安排在某间教室的课程安排,且最大程度利用好这间教室呢?

—按课程时间选出不冲突的,比如9:00–10:00 10:00—11;00,而不是选9:00–10:00 9:20–10:30

这就是贪婪算法,每步选择最优,也就是选择局部最优解,并非在任何情况下都行之有效,但是易于实现—联想OMP算法也是贪婪算法,每次都找到投影最大值最大的那一列

8.2背包问题

《《算法图解》第八章 贪婪算法》 有个小偷要偷东西,现在有如上图三种东西可以偷,但是他的包只能装35kg的东西,那他偷东西的时候要怎么选最优呢? 如果开始就选了最贵的,但是重量达到30,他就没法再装下大于5的东西了,那要怎么办呢?
说明:贪婪策略斌不能获得最优解–有些情况下,完美是优秀的敌人

8.3集合覆盖问题

1.现在有一档节目要在全美50个州播放,你要选择一些广播台,能够覆盖全美,且用尽量少的广播台 降低数据量后 假设有10个州需要覆盖,有5个广播台可以选择,设计算法进行广播台的选择

states_needed=set(["mt","wa","or","id","nv","ut","ca","az"])
stations = {}
stations["kone"] = set(["id", "nv", "ut"])
stations["ktwo"] = set(["wa", "id", "mt"])
stations["kthree"] = set(["or", "nv", "ca"])
stations["kfour"] = set(["nv", "ut"])
stations["kfive"] = set(["ca", "az"])
final_stations=set()
while states_needed:
    best_station =None
    states_covered = set()
    for station,state in stations.items():
        covered = states_needed & state
        if len(covered) > len(states_covered):
            best_station = station
            states_covered = covered
            
    final_stations.add(best_station)
    states_needed -= states_covered
print(final_stations)

程序具体讲解 贪婪算法近似集合覆盖问题的解 – lilong117194的博客 – CSDN博客

http://blog.csdn.net/lilong117194/article/details/77657978

2.python里集合的概念,是没有重复的元素的 arr=[1,2,3,3,3,4] set(arr) set([1,2,3,4]) 3.&交集   – 差集
 并集 | 
4.广度优先搜索算法BFS 狄克斯特拉算法 都是贪婪算法
5.贪婪算法和精确算法的运行时间比较
《《算法图解》第八章 贪婪算法》

近似算法

贪婪算法是一种比较好的近似算法

8.4NP-Hard完全问题

1.没有快速算法解决的问题,所以退而求其次,近似算法 2.未解决集合覆盖问题,你必须计算每个可能的集合

8.4.1旅行商问题

商人要到各个城市去,要找一条最短路径,如果要找出最短路径得把所有可能的结果都列出来是n的阶乘问题n! 所以找到一条比较短的就不错了,从出发城市开始,选择下一个城市时,就选还没去最短的城市

8.4.2如何识别NP完全问题

学习识别NPhard完全问题,以免浪费时间去寻找解决答案 1.阶乘问题 2.需要找出所有的结果,涉及所有组合
3.元素较少时,算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢
4.不能将问题分为小问题,必须考虑所有情况,可能就是NPHard问题
5.如果问题涉及序列,如旅行商问题中的城市序列,难以解决,可能就是NPHard问题
6.如果问题转为集合覆盖问题或旅行商问题,肯定是NPHard问题

8.5小结

贪婪算法寻找局部最优解,企图以这种方式获得全局最优解
对于NPHard问题,还没有找到快速解决方案
面临NPHard问题,最佳做法是使用近似算法
贪婪算法易于实现,运行速度快,是不错的近似算法


    原文作者:贪心算法
    原文地址: https://blog.csdn.net/weixin_38313518/article/details/78538075
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞