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)
  • 相关阅读:
    知识图谱
    spring mvc踩坑记
    学习计划
    迷茫中看见一道曙光
    面试复习准备
    关于配置httpd2.4.18+php5.6
    notepad++ 等用正则表达式自动添加sql引号(宏)
    JDK1.8的HashMap实现原理和源码解析
    Java垃圾回收机制
    sql server 表分区
  • 原文地址:https://www.cnblogs.com/pickKnow/p/10967069.html
Copyright © 2011-2022 走看看