學習筆記 | 貪心算法(貪婪算法)

  • 貪心算法,是從問題的初始解開始,一步一步地做出當前最好的選擇,逐步逼近問題的目標,儘可能地得到最優解,即使達不到最優解,也可以得到最優解的近似解
  • 也就是說,它期望通過局部最優選擇從而得到全劇最優的解決方案。
在貪心算法中,我們需要注意的問題是:
  • 沒有後悔藥。一旦做出選擇,不可以反悔。
  • 有可能得到的不是最優解,而是最優解的近似解、可行解。
  • 選擇什麼樣的貪心策略,直接決定算法的好壞。

01 利用貪心算法求解問題具有兩個重要的特性:

  • 如果無法使用貪心算法,舉出反例即可。歸納和反證法

貪心選擇

  • 所謂貪心選擇性質是指原問題的整體最優解可以通過一系列局部最優的選擇得到。應用統一規則,將原問題變爲一個相似的但規模更小的子問題,而後的每一步都是當前最佳的選擇。這種選擇依賴於已做出的選擇,但不依賴於未作出的選擇。運用貪心策略解決的問題在程序的運行過程中無法回溯過程。

最優子結構

  • 當一個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。問題的最優子結構性質是該問題是否可用貪心算法求解的關鍵。例如原問題S={a1,a2,…,ai,…,an},通過貪心選擇選出一個當前最優解{ai}之後,轉化爲求解子問題S-{ai},如果原問題的最優解包含子問題的最優解,則說明該問題滿足最優子結構性質。

02 貪心算法的使用

貪心策略

  • 首先要確定貪心策略,選擇當前看上去最好的一個方案。例如,挑選蘋果,如果你認爲個大的是最好的,那你每次都從蘋果堆中拿一個最大的,作爲局部最優解,貪心策略就是選擇當前最大的蘋果;如果你認爲最紅的蘋果是最好的,那你每次都從蘋果堆中拿一個最紅的,貪心策略就是選擇當前最紅的蘋果。
  • 因此根據求解目標不同,貪心策略也會不同。

局部最優解

  • 根據貪心策略,一步一步地得到局部最優解。例如,第一次選一個最大的蘋果放起來,記爲a1,第二次再從剩下的蘋果堆中選擇一個最大的蘋果放起來,記爲a2,以此類推。

全局最優解

  • 把所有的局部最優解合成爲原來問題的一個最優解(a1,a2,a3…)。

03 貪心算法的應用場景

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