貪婪算法
在時間或空間有限的條件下,去較爲快速的找到問題的近似解。如典型的旅行商問題,就是一個複雜度爲O(n!)的問題,可能解的數量會隨着路線的增多呈爆炸性增長。
揹包的例子
假設你是一個小偷,有一個可裝35Kg重東西的揹包,要去商場獲取收益。因此要儘量保持包裏裝的東西價值最大。那麼你應該如何去偷呢?
使用貪婪方法步驟:
- 就直接去找價值最大,而且裝得下的商品,
- 就這麼一直放,直到包裏放不下了。
什麼?!這就完事了?對,貪婪算法就是這麼簡單粗暴。雖然找到的不一定是最優解,但也足夠接近,而且速度也足夠快!
另一個例子
在一個週六的晚上,你參加了一個盛大的晚會。由於感到侷促不安,你想知道這一大廳中是否有你已經認識的人。你的主人向你提議說,你一定認識那位正在甜點盤附近角落的女士羅絲。不費一秒鐘,你就能向那裏掃視,並且發現你的主人是正確的。然而,如果沒有這樣的暗示,你就必須環顧整個大廳,一個個地審視每一個人,看是否有你認識的人。
小結
若問題集的規模很小,用任何算法都合適。一旦問題規模複雜度增加,解決一個問題的時間就趁爆炸性增長。因此需要更深入的去探究問題中的規律和本質,找到更優的解決方法。
以有涯解決無涯問題,殆矣。
以下圖片來自《算法圖解》8.3節