還記的貪婪算法麼? 若是你不記得了, 看了下面這個例子你必定會想起來, 由於這個例子太廣泛了, 幾乎每一個將貪婪算法的地方, 第一個例子都是它, 言歸正傳. 算法
問題: 如今有以下課程表, 要將這些課儘量多的安排在教室A內. spa
課程名 | 開始時間 | 結束時間 |
---|---|---|
語文課 | 9:00 | 10:00 |
數學課 | 9:30 | 10:30 |
音樂課 | 10:00 | 11:00 |
政治課 | 10:30 | 11:30 |
美術課 | 11:00 | 12:00 |
首先將全部課程都安排在教師A是不現實的, 由於時間上存在衝突. 那改怎麼安排呢?數學
這個問題很難, 對吧. 算了, 至少我第一次看的時候, 徹底沒有頭緒. 但看了下面的思路, 你又會發現, 啊?這麼簡單麼? it
具體思路table
選出結束時間最先的課程, 將它加到教室A的第一節課class
找出在當前教室A最後一節課的結束時間以後開始, 而且結束時間最先的課程, 將其加到教室A的課表中方法
重複步驟2總結
通過上面的步驟, 得出的課表爲: tab
課程名 | 開始時間 | 結束時間 |
---|---|---|
語文課 | 9:00 | 10:00 |
音樂課 | 10:00 | 11:00 |
美術課 | 11:00 | 12:00 |
如何, 是否是感受這個算法太簡單了, 簡單到我都不敢相信最終的結果是正確的. di
可是這正是貪婪算法的優勢, 簡單, 容易實施.
貪婪算法的思想就是(我的理解), 每一步都找到當前狀態的最優解, 繼續.
來了, 又來了, 又是一個被用爛了的例子, 但我就是要用, 哼.
問題: 如今有一個小偷, 帶着一個能夠裝35kg重東西的包包, 他要將最貴重的東西帶走, 那麼, 貪婪算法思路以下:
將可裝下的最貴的東西裝入揹包
重複步驟1
可是, 若是物品以下:
物品A: 價值300, 重量30kg
物品B: 價值200, 重量20kg
物品C: 價值150, 重量15kg
按照上面的思路, 裝入的內容爲: 物品A, 總價值300
可是, 很顯然, 若是裝入的是: 物品B+物品C, 總價值350
這時, 貪婪算法找出的就不是最優解了.
若是換一種思路呢?
將可裝下的最輕的東西裝入揹包
重複步驟2
你很驚喜的發現, 結果就是咱們要的, 可是, 很差意思, 這只是這種狀況下的知足.
若是換一種狀況呢? 若是物品A價值是500, 其它條件不變呢?
很顯然, 在這裏, 物品有價值和重量兩個值須要考量, 並不可以單單拿出一個來進行判斷(以前的教室問題只須要考慮時間), 須要綜合考慮.
其實我我的以爲, 這個例子舉得並不恰當, 這種問題本就不適合使用貪婪算法來進行求解. 可是處處都用這個例子, 那我就用吧, 由於我也想不出更好的例子了.......
最終的結果雖然不是最優解, 可是也比較接近了. 主要是算法簡單啊
貪婪算法是否是感受優勢動態規劃的意思? 沒錯, 貪婪算法能夠說是動態規劃的一種特例,也就是說, 全部使用貪婪算法可以解決的問題均可以經過動態規劃來解決, 可是反過來並不成立.
其實, 貪婪算法我的感受並不能叫作貪婪算法, 應該叫貪婪思想, 嘿嘿. 由於它並非一個具體的算法, 而是一種解決問題的思路:
每一步都尋找當前狀態的最有解(局部最優解), 最終獲得的就是由全部局部最優解組成的全局最優解, 或接近全局最優解的解
有點只顧眼前利益, 不看長遠利益的感受哈. 這種思路聽起來, 簡單、容易實現, 甚至簡單到讓人懷疑他的正確性, 你的懷疑是對的, 並非每次局部最優解的組合就是全局最優解, 但他的優勢就是簡單啊, 並且對於上面第一個例子中這樣的方法就很好的解決了.
最後, 貪婪算法, 重點在於一個貪字, 哈哈, 請記住貪婪算法的精髓就是貪