ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

08-贪婪算法

2021-02-02 18:04:59  阅读:186  来源: 互联网

标签:问题 set 08 states 算法 station 贪婪 covered


数据结构和算法
基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏

第8章 贪婪算法

贪婪算法的优点: 简单易行,让每一步都选择局部最优解,最终得到的就是全局最优解。
贪婪算法是近似算法:在获得精确解需要的时间太长时,可以使用近似算法。

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

  • 速度有多块。
  • 得到的近似解与最优解的接近程度。

8.1 集合覆盖问题
例如解决经典的集合覆盖问题——选择最优的广播电台:
假设办了个广播节目,要让全美50个州的听众都收听得到。为此,需要决定在哪些广播台播出。在每个广播台播出都需要支付费用,因此,要尽可能少的广播台播出。

#首先创建一个列表,包含要覆盖的州
states_needed = set(["mt", "wa", "id", "nv", "ut", "ca", "az"]) #传入一个数组,它被转换为集合。
#创建可供选择的广播台清单,使用散列表表示。
station = {}
station["kone"] = set(["id","nv","ut"]) 
station["ktwo"] = set(["wa","id","mt"])
station["kthree"] = set(["or","nv","ca"])
station["kfour"] = set(["nv","ut"])
station["kfive"] = set(["ca","az"])
#创建一个集合来存储最终选择的广播台。
final_station = set()

#计算结果
while states_needed:
	best_staion = None
	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

8.2 NP完全问题
Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。

判断NP完全问题的方法:

  • 元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢。
  • 涉及“所有组合”的问题通常是NP完全问题。
  • 不能将问题分成小问题,必须考虑各种可能的情况。
  • 如果问题涉及序列且难以解决(如旅行商问题中的城市序列)。
  • 如果问题涉及集合且难以解决(如广播台集合)。
  • 如果问题可转换为集合覆盖问题或者旅行商问题,就肯定是NP问题。

8.3 小结

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

——持续修改完善中…

标签:问题,set,08,states,算法,station,贪婪,covered
来源: https://blog.csdn.net/weixin_44774417/article/details/113568438

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有