贪婪算法回顾
回顧
還記的貪婪算法么? 如果你不記得了, 看了下面這個例子你一定會想起來, 因為這個例子太普遍了, 幾乎每個將貪婪算法的地方, 第一個例子都是它, 言歸正傳.
問題: 現在有如下課程表, 要將這些課盡可能多的安排在教室A內.
| 語文課 | 9:00 | 10:00 |
| 數學課 | 9:30 | 10:30 |
| 音樂課 | 10:00 | 11:00 |
| 政治課 | 10:30 | 11:30 |
| 美術課 | 11:00 | 12:00 |
首先將所有課程都安排在教師A是不現實的, 因為時間上存在沖突. 那改怎么安排呢?
這個問題很難, 對吧. 算了, 至少我第一次看的時候, 完全沒有頭緒. 但看了下面的思路, 你又會發現, 啊?這么簡單么?
具體思路
經過上面的步驟, 得出的課表為:
| 語文課 | 9:00 | 10:00 |
| 音樂課 | 10:00 | 11:00 |
| 美術課 | 11:00 | 12:00 |
如何, 是不是感覺這個算法太簡單了, 簡單到我都不敢相信最終的結果是正確的.
但是這正是貪婪算法的優點, 簡單, 容易實施.
貪婪算法的思想就是(個人理解), 每一步都找到當前狀態的最優解, 繼續.
顯然,貪婪算法并不總是能夠找到最優解
來了, 又來了, 又是一個被用爛了的例子, 但我就是要用, 哼.
問題: 現在有一個小偷, 帶著一個可以裝35kg重東西的包包, 他要將最貴重的東西帶走, 那么, 貪婪算法思路如下:
但是, 如果物品如下:
按照上面的思路, 裝入的內容為: 物品A, 總價值300
但是, 很顯然, 如果裝入的是: 物品B+物品C, 總價值350
這時, 貪婪算法找出的就不是最優解了.
如果換一種思路呢?
你很驚喜的發現, 結果就是我們要的, 但是, 不好意思, 這只是這種情況下的滿足.
如果換一種情況呢? 如果物品A價值是500, 其它條件不變呢?
很顯然, 在這里, 物品有價值和重量兩個值需要考量, 并不能夠單單拿出一個來進行判斷(之前的教室問題只需要考慮時間), 需要綜合考慮.
其實我個人覺得, 這個例子舉得并不恰當, 這種問題本就不適合使用貪婪算法來進行求解. 但是到處都用這個例子, 那我就用吧, 因為我也想不出更好的例子了…
最終的結果雖然不是最優解, 但是也比較接近了. 主要是算法簡單啊
總結
貪婪算法是不是感覺優點動態規劃的意思? 沒錯, 貪婪算法可以說是動態規劃的一種特例,也就是說, 所有使用貪婪算法能夠解決的問題都可以通過動態規劃來解決, 但是反過來并不成立.
其實, 貪婪算法個人感覺并不能叫做貪婪算法, 應該叫貪婪思想, 嘿嘿. 因為它并不是一個具體的算法, 而是一種解決問題的思路:
每一步都尋找當前狀態的最有解(局部最優解), 最終得到的就是由所有局部最優解組成的全局最優解, 或接近全局最優解的解
有點只顧眼前利益, 不看長遠利益的感覺哈. 這種思路聽起來, 簡單、容易實現, 甚至簡單到讓人懷疑他的正確性, 你的懷疑是對的, 并不是每次局部最優解的組合就是全局最優解, 但他的優點就是簡單啊, 而且對于上面第一個例子中這樣的方法就很好的解決了.
最后, 貪婪算法, 重點在于一個貪字, 哈哈, 請記住貪婪算法的精髓就是貪
總結
- 上一篇: centeros7安装mysql5.6_
- 下一篇: 岳阳鸿蒙数学培优阶梯训练,鸿蒙应用-呼吸