演算法學習筆記 貪心演算法

2021-09-20 01:56:15 字數 2178 閱讀 2584

貪心也就是貪婪,就好比我們考試期末成績是由平時分和期末成績兩部分組成,我們複習時肯定是想要在考完當前這門之後的最短的時間內得到最多的分數。這就是貪心的思想。

所謂貪心演算法

就是指:我們所做出的選擇在當前情況下總是最好的,它考慮的不是全域性最優解,而是

某種意義上的區域性最優解。核心思想

就是以區域性最優解得到全域性最優解。

需要注意的是貪心演算法不是所有問題的全域性最優解

)還有使用貪心策略必須要求滿足無後效性

(某個狀態以後的過程不會影響以前的狀態,只與當前狀態有關)。

1.建立數學模型來描述問題。

2.用分治的思想把求解的問題分成若干個子問題。

3.對每一子問題求解,得到子問題的區域性最優解。

4.把子問題的解區域性最優解合成原來解問題的乙個解。

貪心演算法適合的條件必須滿足下面條件:

1、貪心選擇性質:就是指問題的整體最優解可以由區域性最優解來得到,即通過貪心選擇來得到。這是貪心演算法與動態規劃的本質區別。

2、最優子結構:所謂最優子結構是指問題的最優解包涵其子問題的最優解。最優子結構性質是使用貪心演算法與動態規劃的關鍵特徵。

while(能朝總目標前進一步)

{利用貪心策略,求出可行解的乙個解元素:

}由所有解元素組合成問題的可行解。

揹包問題

有乙個揹包,揹包容量是m=180。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。

物品     a   b  c  d   e  f   g

重量(w)  35  30  60  50  40  10  25

價值 (p) 10  40  30  50  35  40  30

問題分析:

目標函式: ∑pi最大

約束條件是裝入的物品總重量不超過揹包容量:∑wi<=m( m=180)。

(1)根據貪心的策略,每次挑選價值最大的物品裝入揹包,得到的結果是否最優?

(2)每次挑選所佔重量最小的物品裝入是否能得到最優解?

(3)每次選取單位重量價值最大的物品,成為解本題的策略。

值得注意的是,貪心演算法並不是完全不可以使用,貪心策略一旦經過證明成立後,它就是一種高效的演算法。

貪心演算法還是很常見的演算法之一,這是由於它簡單易行,構造貪心策略不是很困難。

一般來說,貪心演算法的證明圍繞著:整個問題的最優解一定由在貪心策略中存在的子問題的最優解得來的。

還需要說明的是,如果包裹是可以拆分的,那這個問題就得到了整體最優解,前面不變,就是當最後一次裝進去已經超過容量的時候可以選擇只裝她的一部分!很多程式設計題一般是這種情況!

1、找零錢

在貪心演算法裡面最常見的莫過於找零錢的問題了,題目大意如下,對於人民幣的面值有1元 5元 10元 20元 50元 100元,下面要求設計乙個程式,輸入找零的錢,輸出找錢方案中最少張數的方案,比如123元,最少是1張100的,1張20的,3張1元的,一共5張!

2、數字組合問題

設有n個正整數,現在需要你設計乙個程式,使他們連線在一起成為最大的數字,例3個整數 12,456,342 很明顯是45634212為最大,4個整數 342,45,7,98顯然為98745342最大

3、活動時間安排的問題

設有n個活動時間集合,每個活動都要使用同乙個資源,比如說會議場,而且同一時間內只能有乙個活動使用,每個活動都有乙個使用活動的開始si和結束時間fi,即他的使用區間為(si,fi),現在要求你分配活動占用時間表,即哪些活動占用該會議室,哪些不占用,使得他們不衝突,要求是盡可能多的使參加的活動最大化,即所佔時間區間最大化!

上圖為每個活動的開始和結束時間,我們的任務就是設計程式輸出哪些活動可以占用會議室!

4、線段覆蓋問題(我認為本質上和時間問題差不多)

在一維空間中告訴你n條線段的起始座標與終止座標,要求求出這些線段一共覆蓋了多大的長度。

關於以上問題的解及**,我就不寫了,我認為這篇寫的比我好:

演算法學習筆記 貪心演算法

1 建立數學模型來描述問題 2 把求解的問題分成若干個子問題 3 對每一子問題求解,得到子問題的區域性最優解 4 把子問題的區域性最優解合併成原來解問題的乙個解。1 從問題的某一初始解出發 2 while能向給定總目標前進一步 3 求出可行解的乙個解元素 4 由所有解元素組合成問題的乙個可行解。這個...

貪心演算法學習筆記

貪心演算法是指在對問題求解時,總是做出在當前看來是最好的選擇。不從整體最優上加以考慮,只做出在某種意義上的區域性最優解。選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。最優解問題大部分都可以拆分成乙個個的子問題,把解空間的遍歷視作對子問題樹的遍歷,則以某種形...

演算法學習 貪心演算法

所謂貪心演算法,是在對問題求解時,總是做出在當前看來最好的選擇。即,不從整體最優上加以考慮,它所做出的僅僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,就是某個狀態以前的過程不會影響以後的狀態,只與當前的狀態有關。貪心...