第十四關 貪心演算法

2022-08-28 14:15:21 字數 2760 閱讀 9527

09:19:40 沿途幾多障礙,埋頭撞向未來.——連詩雅《只要和你在一起》

「為了避免結束,你避免了所有開始」可是有的時候,結束未必是壞事,開始也一樣。貪心一點,也沒有什麼不好.

貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。

貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。

貪心演算法顧名思義就是用計算機來模擬乙個「貪心」的人做出決策的過程。

這個人每一步行動總是按某種指標選取最優的操作,他總是只看眼前,並不考慮以後可能造成的影響

可想而知,並不是所有的時候貪心法都能獲得最優解,所以一般使用貪心法的時候,都要確保自己能證明其正確性。

貪心選擇是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇來達到。這是貪心演算法可行的第乙個基本要素,也是貪心演算法與動態規劃演算法的主要區別。貪心選擇是採用從頂向下、以迭代的方法做出相繼選擇,每做一次貪心選擇就將所求問題簡化為乙個規模更小的子問題。對於乙個具體問題,要確定它是否具有貪心選擇的性質,我們必須證明每一步所作的貪心選擇最終能得到問題的最優解。通常可以首先證明問題的乙個整體最優解,是從貪心選擇開始的,而且作了貪心選擇後,原問題簡化為乙個規模更小的類似子問題。然後,用數學歸納法證明,通過每一步貪心選擇,最終可得到問題的乙個整體最優解。

當乙個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。運用貪心策略在每一次轉化時都取得了最優解。問題的最優子結構性質是該問題可用貪心演算法或動態規劃演算法求解的關鍵特徵。貪心演算法的每一次操作都對結果產生直接影響,而動態規劃則不是。貪心演算法對每個子問題的解決方案都做出選擇,不能回退;動態規劃則會根據以前的選擇結果對當前進行選擇,有回退功能。動態規劃主要運用於二維或三維問題,而貪心一般是一維問題

建立數學模型來描述問題;

把求解的問題分成若干個子問題;

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

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

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

物品 a b c d e f g

重量 35kg 30kg 6kg 50kg 40kg 10kg 25kg

價值 10$ 40$ 30$ 50$ 35$ 40$ 30$

分析:目標函式:∑pi最大

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

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

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

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

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

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

假設現在有一批寶物,價值和重量如表 2-3 所示,毛驢運載能力 m=30,那麼怎麼裝入最大價值的物品?

表 2-3  寶物清單

寶物 i  1  2  3  4  5  6  7  8  9  10

重量 w[i]  4  2  9  5  5  8  5  4  5  5

價值 v[i]  3  8  18  6  8  20  5  6  7  15

(1)因為貪心策略是每次選擇價效比(價值/重量)高的寶物,可以按照價效比降序排序,排序後如表 2-4 所示。

表 2-4  排序後寶物清單

寶物 i  2  10  6  3  5  8  9  4  7  1

重量 w[i]  2  5  8  9  5  4  5  5  5  4

價值 v[i]  8  15  20  18  8  6  7  6  5  3

價效比 p[i]  4  3  2.5  2  1.6  1.5  1.4  1.2  1  0.75

(2)按照貪心策略,每次選擇價效比高的寶物放入:

第 1 次選擇寶物 2,剩餘容量 30−2=28,目前裝入最大價值為 8。

第 2 次選擇寶物 10,剩餘容量 28−5=23,目前裝入最大價值為 8+15=23。

第 3 次選擇寶物 6,剩餘容量 23−8=15,目前裝入最大價值為 23+20=43。

第 4 次選擇寶物 3,剩餘容量 15−9=6,目前裝入最大價值為 43+18=61。

第 5 次選擇寶物 5,剩餘容量 6−5=1,目前裝入最大價值為 61+8=69。

第 6 次選擇寶物 8,發現上次處理完時剩餘容量為 1,而 8 號寶物重量為 4,無法全部放入,那麼可以採用部分裝入的形式,裝入 1 個重量單位,因為 8 號寶物的單位重量價值為1.5,因此放入價值 1×1.5=1.5,你也可以認為裝入了 8 號寶物的 1/4,目前裝入最大價值為69+1.5=70.5,剩餘容量為 0。

(3)構造最優解

把這些放入的寶物序號組合在一起,就得到了最優解(2,10,6,3,5,8),其中最後乙個寶物為部分裝入(裝了 8 號財寶的 1/4),能夠裝入寶物的最大價值為 70.5。

例題題型分析

漫畫講解

p1804疫情控制

p1056排座椅

p2283多邊形

p1315觀光公交

10:17:08 寫在最後:我好睏!!!

第十四章約束

約束 constraint 是一種保證資料完整性的規則。約束設定在單個字段或者多個字段組合上,寫入這些欄位的行資料必須要符合約束的規則 約束的五種型別 not null 非空約束,指定某列的所有行資料不能包含空值 unique 唯一性約束,指定列或者列的組合的所有行資料必須唯一 primary ke...

第十四周小結

這一周,我們分到了新的學習場地 609 我們組全員搬來了這裡。609在院裡被叫做 眾創空間 這裡不僅有著更好的學習條件,還存放著我們院裡的榮譽,一張一張的獎狀,還有精美的證書,讓我對信工院有了新的認識。同時,在日常生活中我也有一些自己的心得。一 執行力 結果很重要 之前 給我們在小組的所有成員開了乙...

第十四周總結

一.學習 今天很開心,因為我成功的做出了我人生的第乙個比較完整全面的頁面,雖然用的都是一些很簡單的 但那也是我花了乙個晚上做出來的,是我用這段時間所學的前端知識做出來的。雖然當時已經很晚了,但我絲毫感覺不到睡意,心中只有乙個目標,那就是今晚一定要完成它。或許對別人來說這不算什麼,但那張頁面被注入的精...