贪婪算法近似集合覆盖问题的解
生活随笔
收集整理的這篇文章主要介紹了
贪婪算法近似集合覆盖问题的解
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
實(shí)例:
假設(shè)你辦了個(gè)廣播節(jié)目,要讓全美50個(gè)州的聽(tīng)眾都聽(tīng)到。為次,你需要決定哪些廣播臺(tái)播出。在每個(gè)廣播臺(tái)播出都需要支付費(fèi)用,因此你要盡可能少的在廣播臺(tái)播出。。
其中每個(gè)廣播臺(tái)覆蓋特定的區(qū)域,不同廣播臺(tái)的覆蓋區(qū)域可能重疊
這樣的話要遍歷所有的可能的子集合組合,就有2n,其中n為廣播臺(tái)數(shù)目,用大O表示法運(yùn)行時(shí)間為O(2n)。如果廣播臺(tái)很多,就成了一個(gè)NP難問(wèn)題,而貪婪算法可以得到非常接近的解:
這是一種近似算法,因?yàn)楂@得精確解需要的時(shí)間太長(zhǎng),而貪婪算法可以很好的近似。。
而貪婪算法的運(yùn)行時(shí)間為O(n2),減少的時(shí)間不止一點(diǎn)點(diǎn)。。
結(jié)果:
========== 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']) >>>得到了最終選的廣播臺(tái)集合是:’ktwo’, ‘kthree’, ‘kone’, ‘kfive’這4個(gè)
這只是個(gè)很簡(jiǎn)單的NP難得例子,還有其他的很多,有待進(jìn)一步學(xué)習(xí)。。
參考:《算法圖解》
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的贪婪算法近似集合覆盖问题的解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。