揹包問題——貪婪算法

貪婪算法

在時間或空間有限的條件下,去較爲快速的找到問題的近似解。典型的旅行商問題,就是一個複雜度爲O(n!)的問題,可能解的數量會隨着路線的增多呈爆炸性增長。

揹包的例子

假設你是一個小偷,有一個可裝35Kg重東西的揹包,要去商場獲取收益。因此要儘量保持包裏裝的東西價值最大。那麼你應該如何去偷呢?

使用貪婪方法步驟:

  1. 就直接去找價值最大,而且裝得下的商品,
  2. 就這麼一直放,直到包裏放不下了。

什麼?!這就完事了?對,貪婪算法就是這麼簡單粗暴。雖然找到的不一定是最優解,但也足夠接近,而且速度也足夠快!

 

另一個例子

在一個週六的晚上,你參加了一個盛大的晚會。由於感到侷促不安,你想知道這一大廳中是否有你已經認識的人。你的主人向你提議說,你一定認識那位正在甜點盤附近角落的女士羅絲。不費一秒鐘,你就能向那裏掃視,並且發現你的主人是正確的。然而,如果沒有這樣的暗示,你就必須環顧整個大廳,一個個地審視每一個人,看是否有你認識的人。

 

小結

若問題集的規模很小,用任何算法都合適。一旦問題規模複雜度增加,解決一個問題的時間就趁爆炸性增長。因此需要更深入的去探究問題中的規律和本質,找到更優的解決方法。

以有涯解決無涯問題,殆矣。

 

以下圖片來自《算法圖解》8.3節

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章