【算法导论】08 贪婪算法(待修改)

举例:

小偷是贪婪的,当去店里的时候,包里有35磅的空间。有下面三个物体可以选择,最优解肯定是2000+1500,但小偷可能搞不清楚,也没有时间。

贪婪算法:只要我能放得下,我选最贵的。选择放音箱,拿着就跑。

对小偷来说,拿着一个音箱,安全,快速,也不需要遍历商店里所有的东西,虽然不是最优解,但这种方法比较有效。

之前的寻找最短路径也是贪婪算法,

面对完全NP问题时,最佳的做法是使用近似算法。因为n个城市全部遍历完需要n!次

贪婪算法易于实现、运行速度快,是不错的近似算法。

# 需要覆盖的集合
states_needed = set(['mt','wa','or','id','nv','ut','ca','az'])
stations = {}    # python中字典是一个哈希表,不能保证键的顺序
stations['kone'] = set(['id','nv','ut'])    # key是电台名字,value是覆盖的洲
stations['ktwo'] = set(['wa','id','mt'])
stations['kthree'] = set(['or','nv','ca'])
stations['kfour'] = set(['nv','ut'])
stations['kfive'] = set(['ca','az'])

final_stations = set()

while states_needed:            # states_needed 是八个州
    best_station = None
    states_covered = set()        # set()是0
    for station, states in stations.items():        # 这里放进去的顺序不一定是按上面的顺序,用三个州(1,2,3)比上8个州,结果就是三个州
        covered = states_needed & states            # covered 就是3个州
        if len(covered) > len(states_covered):        # 3>0
            best_station = station
            states_covered = covered

    states_needed -= states_covered
    final_stations.add(best_station)

print final_stations

运行结果如下 

set(['ktwo', 'kthree', 'kone', 'kfive'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值