zoukankan      html  css  js  c++  java
  • 算法图解-贪婪算法

    内容:

    • 如何处理不可能完成的任务;没有快速算法的问题(NP完全问题)
    • 学习是被NP完全问题,以免浪费时间去寻找解决他们的快速算法
    • 学习近似算法,使用它们可快速中找到NP完全问题的近似解
    • 学习贪婪策略——一种非常简单的问题解决策略

    8.1教室调度问题

      贪婪算法:每步都采取绝不最优解,最终的到的就是全局最优解。

    贪婪苏凡并非任何情况下都有效,但它易于实现。

    8.2背包问题

      贪婪算法并不能得到最优解,但是非常接近。

    在有些情况下,完美是优秀的敌人。 有时,只需找到一个单只解决问题的算法啊,此时贪婪算法正好派上用场,其易于实现,得到的结果又与最优结果相当接近。

    8.3近似算法

      贪婪算法是一种近似算法,在获得精确解需要时间太长时,可使用近似算法。

      判断近似算法优劣的标准如下:

    • 速度有多快
    • 的到的近似解与最优解的接近程度

      使用贪婪算法解决广播台覆盖问题。

     1 # You pass an array in, and it gets converted to a set.
     2 states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"])
     3 
     4 stations = {}
     5 stations["kone"] = set(["id", "nv", "ut"])
     6 stations["ktwo"] = set(["wa", "id", "mt"])
     7 stations["kthree"] = set(["or", "nv", "ca"])
     8 stations["kfour"] = set(["nv", "ut"])
     9 stations["kfive"] = set(["ca", "az"])
    10 
    11 final_stations = set()
    12 
    13 for station, states in stations.items():
    14 #  print "states: ", states
    15   print "station: ", station
    16 print "
    "
    17 
    18 while states_needed:
    19   best_station = None
    20   states_covered = set()
    21   for station, states in stations.items():#station is index, states is element
    22     covered = states_needed & states  # get intersection
    23     print "covered: ", covered
    24     print "states_covered: ", states_covered
    25     print "states: ", states
    26     print "station: ", station
    27     print "***********
    "
    28     
    29     if len(covered) > len(states_covered):
    30       best_station = station
    31       states_covered = covered
    32 
    33   states_needed -= states_covered
    34   final_stations.add(best_station)
    35 
    36 print final_stations
    set_covering.py

    说明:

    1. 代码中的for循环对广播站进行进行遍历,查找出能覆盖最多州的广播站;
    2. for循环结束后,把已覆盖的州从集合中删除,更新最终解的集合;
    3. 如果还有未覆盖的州,继续执行步骤1(第二部中,应该把找到的广播 站删除);
    4. 直到没有需要覆盖的州,则查找结束。

    8.4 NP完全问题

    1. 定义:NP完全问题的简单定义是,以难解著称的问题,如旅行商问题和集合覆盖问题。很多人认为,没有可以快速结果这些问题的算法。
    2. 如何识别:
    • 元素较少时算法的运行速度非常快,但随着元素的增加,速度变得非常慢
    • 涉及“所有组合”的问题通常是NP完全问题
    • 不能将问题分成小问题,必须考虑各种可能的情况,这可能是NP完全问题
    • 如果涉及集合且难以解决,它可能是NP完全问题
    • 如果问题涉及集合且难以解决,他可能是NP完全问题
    • 如果问题可转换为集合覆盖问题或旅行商问题,它肯定是NP完全问题

    8.5小结

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

    贪心算法C语言实现:

    https://blog.csdn.net/yongh701/article/details/49256321

  • 相关阅读:
    如何:为 Silverlight 客户端生成双工服务
    Microsoft Sync Framework 2.1 软件开发包 (SDK)
    Windows 下的安装phpMoAdmin
    asp.net安全检测工具 Padding Oracle 检测
    HTTP Basic Authentication for RESTFul Service
    Windows系统性能分析
    Windows Server AppFabric Management Pack for Operations Manager 2007
    Mongo Database 性能优化
    服务器未能识别 HTTP 标头 SOAPAction 的值
    TCP WAIT状态及其对繁忙的服务器的影响
  • 原文地址:https://www.cnblogs.com/mofei004/p/8909139.html
Copyright © 2011-2022 走看看