贪婪算法的集合覆盖问题

#贪婪算法 以寻找局部最优解来找全局最优解,是一种近似算法,基于集合

# 广播台分别覆盖的州
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"])

# 对所有需要覆盖的州求并集

states_needed = set(['id', 'or', 'ut', 'wa', 'ca', 'az', 'nv', 'mt'])

# 求至少需要哪些电台
station_final =set()
while states_needed:
	beststation = None
	states_covers = set() #beststation 覆盖的州
	for station, states in stations.items():
		coverd = states_needed & states
		if len(coverd) > len(states_covers): # 是否比beststation覆盖的多,来逐步确定是否为新的beststation 
			beststation = station
			states_covers = coverd
			
	states_needed -=states_covers
	station_final.add(beststation)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值