贪婪算法近似集合覆盖问题的解
生活随笔
收集整理的這篇文章主要介紹了
贪婪算法近似集合覆盖问题的解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實例:
假設你辦了個廣播節目,要讓全美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年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的贪婪算法近似集合覆盖问题的解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归调用栈
- 下一篇: 邮政手机银行怎么更新身份证