贪婪算法近似集合覆盖问题的解
生活随笔
收集整理的这篇文章主要介绍了
贪婪算法近似集合覆盖问题的解
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
实例:
假设你办了个广播节目,要让全美50个州的听众都听到。为次,你需要决定哪些广播台播出。在每个广播台播出都需要支付费用,因此你要尽可能少的在广播台播出。。
其中每个广播台覆盖特定的区域,不同广播台的覆盖区域可能重叠
这样的话要遍历所有的可能的子集合组合,就有2n,其中n为广播台数目,用大O表示法运行时间为O(2n)。如果广播台很多,就成了一个NP难问题,而贪婪算法可以得到非常接近的解:
这是一种近似算法,因为获得精确解需要的时间太长,而贪婪算法可以很好的近似。。
而贪婪算法的运行时间为O(n2),减少的时间不止一点点。。
结果:
========== RESTART: C:\Users\LiLong\Desktop\Algorithm\set_cover.py ========== states_needed: set(['ut', 'ca', 'az', 'or', 'nv']) states_needed: set(['ut', 'az']) states_needed: set(['ut']) states_needed: set([]) set(['ktwo', 'kthree', 'kone', 'kfive']) >>>得到了最终选的广播台集合是:’ktwo’, ‘kthree’, ‘kone’, ‘kfive’这4个
这只是个很简单的NP难得例子,还有其他的很多,有待进一步学习。。
参考:《算法图解》
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是生活随笔为你收集整理的贪婪算法近似集合覆盖问题的解的全部内容,希望文章能够帮你解决所遇到的问题。