集合覆盖问题 贪婪算法反思总结 Python

简介: 集合覆盖问题 贪婪算法反思总结 Python

问题描述:


假设你办了个广播节目,要让全美50个洲的听众都能听到,为此,你需要决定在哪些广播台播出,在每个广播台播出都需要支付费用,力图以最少的费用达到覆盖的目的——来自算法图解


贪婪思路:1:找出所有广播台中覆盖面积最广的(面积指的是未覆盖的面积) 换言之就是寻找覆盖未覆盖面积最广的广播站


2:记录本轮的覆盖区域 更新未覆盖区域(取交集 用到集合set)


3:重复 1 2 直至完全覆盖


初始信息:state_needed(需要覆盖的州),stations 字典(每个广播台覆盖的州)fianl_stations(保存最终选择的广播台)

state_needed=set(['mt','wa','or','id','nv','ut','ca','az'])
stations={}
stations['1']=set(['id','nv','ut'])
stations['2']=set(['wa','id','mt'])
stations['3']=set(['or','nv','ca'])
stations['4']=set(['nv','ut'])
stations['5']=set(['ca','az'])
final_stations=set()
def find_covermost():
    ans,res=0,''
    for k,v in stations.items():
        if ans<len(v&state_needed) and k not in final_stations:ans,res=len(v),k#v&state_needed很关键,覆盖面积广指的是覆盖还没覆盖的面积最广
    final_stations.update([res])
    return stations[res]
while state_needed:
    state_needed-=find_covermost()
print(final_stations)
print(state_needed)
##输出{'5', '3', '1', '2'}
#set()

总结:贪婪算法是一种近似算法,通过寻找局部最优解获得全局最优解  

前面学到的BFS与狄克斯特拉算法就包含的贪婪的思想

另外今天学到了集合中的两个操作 并集>>&    添加元素>>set.update([seq])

我是小郑 期待和你一起进步

相关文章
|
20天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
6天前
|
算法 数据可视化 Python
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
|
6天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
11 0
|
7天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
18 0
|
7天前
|
程序员 索引 Python
06-python数据容器-set(集合)入门基础操作
06-python数据容器-set(集合)入门基础操作
|
8天前
|
缓存 算法 Python
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
|
9天前
|
Python
python学习8-集合
python学习8-集合
|
11天前
|
算法 数据可视化 数据挖掘
使用Python实现DBSCAN聚类算法
使用Python实现DBSCAN聚类算法
150 2
|
14天前
|
算法 Python
使用Python实现朴素贝叶斯算法
使用Python实现朴素贝叶斯算法
15 0
|
15天前
|
机器学习/深度学习 算法 数据可视化
使用Python实现支持向量机算法
使用Python实现支持向量机算法
14 0

热门文章

最新文章