1. 程式人生 > 其它 >貪心演算法(Greedy Algorithm)

貪心演算法(Greedy Algorithm)

貪心演算法總是作出在當前看來最好的選擇 —— 也就是說貪心演算法並不從整體最優考慮,它所作出的選擇只是在某種意義上的區域性最優選擇。

  • 貪心演算法得到的最終結果也可能是整體最優的,例如,單源最短路經問題(Dijskstra演算法),最小生成樹問題等。雖然貪心演算法不能對所有問題都得到整體最優解,但對許多問題它能產生整體最優解。
  • 在一些情況下,即使貪心演算法不能得到整體最優解,其最終結果卻是最優解的很好近似。

貪心演算法一般按如下步驟進行:

  1. 建立數學模型來描述問題。
  2. 把求解的問題分成若干個子問題。
  3. 對每個子問題求解,得到子問題的區域性最優解。
  4. 把子問題的解區域性最優解合成原來解問題的一個解。

貪心演算法是一種對某些求最優解問題的更簡單、更迅速的設計技術。貪心演算法的特點是一步一步地進行,常以當前情況為基礎根據某個優化測度作最優選擇,而不考慮各種可能的整體情況,省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪心演算法採用自頂向下,以迭代的方法做出相繼的貪心選擇,每做一次貪心選擇,就將所求問題簡化為一個規模更小的子問題,通過每一步貪心選擇,可得到問題的一個最優解。雖然每一步上都要保證能獲得區域性最優解,但由此產生的全域性解有時不一定是最優的,所以貪心演算法不要回溯。

 

常見用貪心演算法求解的問題

  • 活動選擇問題
  • 赫夫曼編碼