zoukankan      html  css  js  c++  java
  • 集合覆盖问题与贪婪算法

    贪婪算法的思想:每步都选择局部最优解,最终得到的就是全局最优解。

    近似算法:在获得精确解需要的时间太长是,可使用近似算法。

    判断近似算法的标准:

    速度又多快;

    得到的近似解与最优解的接近程度;

    贪婪算法是不错的选择,不仅简单,而且通常运行速度很快。

    集合运算:

    并集运算:setA | setB

    交集运算:setA & setB

    差集运算:setA - setB

    集合不包含重复的元素;

    用最少的广播台覆盖最多的区域,不同广播台覆盖的区域可能重叠的问题:

    def greedy(states_needed):
    # 存储最终选择的广播台
    final_stations = set()

    while states_needed:
    # 存储覆盖了最多的未覆盖州的广播台
    best_station = None
    # 包含该广播电台覆盖的所有未覆盖的州,for循环迭代每个广播台,并确定它是否是最佳的广播台
    states_covered = set()
    # 遍历所有的广播台
    for station, states in stations.items():
    # 求需要覆盖的台的集合与广播台覆盖的州集合的交集
    covered = states_needed & states
    # 每次找出一个覆盖州最多的广播台
    if len(covered) > len(states_covered):
    # 保存当前的广播台
    best_station = station
    # 保存当前覆盖的州集合
    states_covered = covered
    # 更新需要覆盖的州集合
    states_needed -= states_covered
    # 将找出的广播台添加到最终集合
    final_stations.add(best_station)

    # print(final_stations)
    return final_stations


    if __name__ == '__main__':

    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"])
    print(greedy(states_needed))
  • 相关阅读:
    要如何用[ZT]sendmessage來切換PageControl1 的TabSheet2呢
    Delphi 常用API 函数
    [ZT]如何得到其他程序的Richedit中的RTF数据
    转帖一篇关于DELPHI调试的文章AQTime
    讀取股票資料檔與指標計算方法之封裝
    GC的三代回收机制
    SQL语句的解析过程
    .Net 垃圾回收机制整理
    美国人吃了交通罚单怎么办?
    Ihttphandler,Ihttpmodule
  • 原文地址:https://www.cnblogs.com/songyuejie/p/11422543.html
Copyright © 2011-2022 走看看