1. 程式人生 > >acm_貪心總結

acm_貪心總結

貪心演算法:

在求最優解問題的過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求每一步的最優解,通過若干次的貪心選擇,最終得出整個問題的最優解,這種求解方法就是貪心演算法。

從貪心演算法的定義可以看出,貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解,而由問題自身的特性決定了該題運用貪心演算法可以得到最優解。而且如果一個問題可以有多個方法求解,那麼貪心演算法一定是最好的解決辦法!!

理論基礎:

貪心演算法是一種在每一步選擇中都採取在當前狀態下最好或最優的選擇,希望得到結果是最好或最優的演算法。
貪心演算法是一種能夠得到某種度量意義下的最優解的分級處理方法,通過一系列的選擇得到一個問題的解,而它所做的每一次選擇都是當前狀態下某種意義的最好選擇。即希望通過問題的區域性最優解求出整個問題的最優解。
這種策略是一種很簡潔的方法,對許多問題它能產生整體最優解,但不能保證總是有效,因為它不是對所有問題都能得到整體最優解。
利用貪心策略解題,需要解決兩個問題:
(1)該題是否適合於用貪心策略求解;
(2)如何選擇貪心標準,以得到問題的最優/較優解。

貪心演算法大概有這麼幾個經典型別:

1:活動安排問題  這種問題可以用結束時間排序,然後不斷拿後一次的開始時間比較,迴圈,最大利用時間。。

2,:揹包問題   揹包問題不能單純的考慮一方面,重量或是價格,應用一個詞“價效比”來裝包,從價效比最高的開始,一直裝到不能再裝為止,如果能分割,那麼可以最大利用空間!!

3:最優裝載問題  這個和揹包問題差不多,甚至還簡單,就不說了。。

4:多次服務最優次序問題:這種型別還是比較簡單的,首先排好序,然後兩個視窗依次取,誰完成就取,從小的開始。。

5:桌子移動問題:其實這個可以把桌子數除以二,然後可以把陣列值為零,依次輸入資料,從誰那通過就加一,依次累加即可。。

貪心演算法,實際應用我感覺應該還是挺有用的,因為他可以把一個大的問題分解為若干個小問題,然後求最優解,這樣比求一個大問題肯定要簡單的多,畢竟有句話是“大事化小,小事化了”嗎。。