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

    贪婪算法:

    这是一种近似算法(approximation algorithm)。在获得精确解需要的时间太长时,可使用近
    似算法。判断近似算法优劣的标准如下:
     速度有多快;
    得到的近似解与最优解的接近程度。
    贪婪算法是不错的选择,它们不仅简单,而且通常运行速度很快。在这个例子中,贪婪算法
    的运行时间为O(n2),其中n为广播台数量。

    问题:

    每个广播电台,在固定几个州播放,现在向用最少的电台,将所有的州都覆盖

    贪婪算法解决思路:在电台中找到一个最有解(未覆盖州中,电台指向最多的州),更新未覆盖的州,以此思路,知道所有的州都覆盖

    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_station = set()
    
    def find_final_station():
        global states_needed
        global stations
        best_station = None
        states_covered = set()
        for station_key, station_value in stations.items():
            cover = states_needed & station_value
            if len(cover) > len(states_covered):
                best_station = station_key
                states_covered = station_value
        final_station.add(best_station)
        states_needed = states_needed - states_covered
    
    while states_needed:
        find_final_station()
    
    print(final_station)
  • 相关阅读:
    图解 PHP运行环境配置和开发环境的配置
    PHP学习笔记(2)语法和数据类型
    Jquery调用 新浪微博API 用户资料
    [转载]并行计算部分总结
    Qt QTreeWidget节点的添加+双击响应+删除详解
    C/C++中函数参数传递详解
    C语言预处理——宏定义
    cuda工程在VS中使用心得
    MPI用于矩阵乘积示例
    开到荼蘼花事了,永世相守孟婆桥
  • 原文地址:https://www.cnblogs.com/pickKnow/p/10967069.html
Copyright © 2011-2022 走看看