貪心算法

最優化問題


定義:給定一組限制條件(constraint)和一個優化函數(optimization function),求出一個可行解(feasible solution),使得優化函數可能取得最優值,即最優解(optimal solution),求解這樣一個最優解的問題就稱爲最優化問題(optimization problem)。

解決一個最優化問題有很多種方法:貪心算法、分治算法、動態規劃、線性規劃、整數規劃、遺傳算法、中心網絡、模擬退貨、回溯法和分支界定等。通過例子可以更好地分析和理解貪婪算法。

貪心算法思想


在貪心算法(Greedy Algorithm)中,我們要逐步構造一個最優解。首先找到一個貪心準則(greedy criterion),然後在每一步,依據這個準則作出一個最優策略,每一步作出的最優策略,在以後的步驟中都不允許在更改。

例如,最經典的找零錢的問題:
有面值爲25美分、10美分、5美分和1美分的硬幣,且數目不限。若有人拿着1美元買不足1美元的東西,收銀員需要進行找零,每次拿出一個硬幣,湊成要找的零錢。選擇時依據的貪心準則是:在不超過要找零錢總數的條件下,每一次儘量選擇面值最大的硬幣。直到湊成的零錢等於要找的零錢數。

假設要找42美分。第一步選擇一個25美分的硬幣,第二步選擇10美分,第三步選擇5美分,最後選擇兩個1美分的硬幣。

貪心算法給人一種感性的認識:這樣湊出的零錢,硬幣的數目最少或者接近最少。
以下給出證明:
根據算法導論,需證明兩點:
1.貪心選擇性質,要證明之即要證明每一步所作的貪心選擇必將導致整體最優解。
2.最優子結構性質,反證法。

證明:

證明最優子結構

這裏寫圖片描述

貪心選擇性

綜上(1)(2),通過此貪心算法湊出的零錢,硬幣數目最少。

應用


單源最短路徑——Dijkstra算法

拓撲排序

發佈了30 篇原創文章 · 獲贊 22 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章