贪婪算法简单总结

贪婪算法的简单总结:

贪婪算法就是每步都采取最优的做法,也就是说每步都选择局部最优解,最终得到的就是全局最优解

贪婪算法并非适用于任何情况,但它却易于实现

有时候可以使用贪婪算法作为近似算法

评价近似算法的优劣标准:

1. 速度有多快。

2. 得到的近似解与最优解的接近程度。

 

举例:

集合覆盖问题,假设你办了个广播节目,要让全美50个州的听众都能收听到。为此你需要决定在哪些广播台播出,在每个广播台播出都需要支付费用,因此你力图在尽可能少的广播台播出。

 

贪婪算法作为近似算法,步骤如下:

1. 选出这样一个广播台,即它覆盖了最多的未覆盖州。即便这个广播台覆盖了一些已覆盖的州,也没有关系。

2. 重复第一步,直到覆盖了所有的州。

 

 

 

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

  2 final_stations = set()

  3 stations = {}

  4 stations['kone'] = set(['id','nv','ut'])

  5 stations['ktwo'] = set(['wa','id','mt'])

  6 stations['kthree'] = set(['or','nv','ca'])

  7 stations['kfour'] = set(['nv','ut'])

  8 stations['kfive'] = set(['ca','az'])

  9

 10 while states_needed:

 11     best_station = None

 12     states_covered = set()

 13     for station,states in stations.items():

 14         covered = states_needed & states

 15         if len(covered) > len(states_covered):

 16             best_station = station

 17             states_covered = covered

 18

 19     states_needed -= states_covered

 20     final_stations.add(best_station)

 21

 22 print(final_stations)

贪婪算法简单总结_第1张图片


代码解释:

 贪婪算法简单总结_第2张图片

 

你可能感兴趣的:(算法)