貪心演算法中「貪心」二字形象的說明了該演算法的基本思想:貪心(每一步選擇都是眼下的區域性最優選擇)。
比如每次給你1張面額不定的紙幣,共10次,你這麼選?肯定是每次都要一張100元的。當你要拿第一張時,此時眼下最優的選擇就是拿一張100的,不會管拿了之後會不會對後面的9張產生影響。這就是一種貪心,當然這種情況下的貪心選擇也是最優的選擇,因為區域性最優導致了整體的最優。
貪心演算法常用於求解最優解問題,比動態規劃思路簡單,前提是要求問題滿足貪心選擇性質。
形象的講:
貪心演算法的每次選擇就是只看當前的利益,不管當前的選擇對後面選擇的影響,所以如果當前的選擇對之後的選擇有影響時,這種選擇就不一定最優了。
動態規劃就是三思而後行,在考慮當前選擇能產生的各種結果中選擇乙個最優的,想得多速度也就慢了。
比如上面的例子,如果規定超過2張100,後面每張就都只會給1元的,那麼按照貪心選擇依然會前兩張選擇100的,後面就只能拿1元的,總共208元。按照動態規劃,則會聰明的先選一張100元,後面每次都選擇50元,總共550元。
貪心演算法思想簡單,應用場合也廣泛。
使用貪心演算法,問題必須滿足最優子結構性質和貪心選擇性質。
問題的全域性最優解是通過區域性最優選擇得到的。
(1)揹包問題(物體可切分時的0-1揹包問題)
(2)huffman編碼
(3)單源最短路徑
(4)prim演算法
(5)kruskal演算法
(6)最優三角剖分
之前寫的部落格:
prim演算法
理解動態規劃演算法與貪心演算法區別----找錢問題
ps:貪心演算法比較容易理解,寫的比較簡略,後續有想法再補充。
作者 :jarvischu
出處:
貪心演算法入門
什麼是貪心呢?貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後...
貪心演算法入門
貪心演算法例題 1 2 取糖果3 輸入 4 15 四箱,能裝的重量為15 4 價值,重量 5100 4 6412 8 7266 7 8591 2 9輸出 101193.0 11 1213 include14 include15 using namespace std 1617 struct cand...
總結 貪心演算法 貪心演算法入門總結
英語 greedy algorithm,又稱貪婪演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是最好或最優的演算法。比如在旅行推銷員問題中,如果旅行員每次都選擇最近的城市,那這就是一種貪心演算法。貪心演算法在有最優子結構的問題中尤為有效。最優子結構的意思...