leetcode 貪心演算法

2022-06-15 20:36:16 字數 798 閱讀 9358

貪心演算法中,是以自頂向下的方式使用最優子結構,貪心演算法會先做選擇,在當時看起來是最優的選擇,然後再求解乙個結果的子問題。

貪心演算法是使所做的選擇看起來都是當前最佳的,期望通過所做的區域性最優選擇來產生乙個全域性最優解

如最小生成樹、dijkstra單源最短路徑

貪心選擇性質

所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇來達到。這是貪心演算法可行的第乙個基本要素,也是貪心演算法與動態規劃演算法的主要區別。在動態規劃演算法中,每步所作的選擇往往依賴於相關子問題的解。因而只有在解出相關子問題後,才能作出選擇。而在貪心演算法中,僅在當前狀態下作出最好選擇,即區域性最優選擇。然後再去解作出這個選擇後產生的相應的子問題。貪心演算法所作的貪心選擇可以依賴於以往所作過的選擇,但決不依賴於將來所作的選擇,也不依賴於子問題的解。正是由於這種差別,動態規劃演算法通常以自底向上的方式解各子問題,而貪心演算法則通常以自頂向下的方式進行,以迭代的方式作出相繼的貪心選擇,每作一次貪心選擇就將所求問題簡化為乙個規模更小的子問題。

對於乙個具體問題,要確定它是否具有貪心選擇性質,我們必須證明每一步所作的貪心選擇最終導致問題的乙個整體最優解。通常可以用我們在證明活動安排問題的貪心選擇性質時所採用的方法來證明。首先考察問題的乙個整體最優解,並證明可修改這個最優解,使其以貪心選擇開始。而且作了貪心選擇後,原問題簡化為乙個規模更小的類似子問題。然後,用數學歸納法證明,通過每一步作貪心選擇,最終可得到問題的乙個整體最優解。其中,證明貪心選擇後的問題簡化為規模更小的類似子問題的關鍵在於利用該問題的最優子結構性質。

動態規劃:

分治演算法:

參考:

貪心演算法(leetcode)

1 分糖果 455 用最小的糖果大小滿足需求最小的孩子 class solution else return count 2 搖擺序列 376 遍歷一次,儲存乙個狀態,如果狀態為上公升,變為下降,則長度 1,下降變上公升 1 class solution def wigglemaxlength se...

LeetCode 貪心演算法

12.15 135.12.21 435.假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i,都有乙個胃口值 g i 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j,都有乙個尺寸 s j 如果 s j g i 我們可以將這個餅乾 j 分配給孩...

LeetCode 貪心演算法

保證每次操作都是區域性最優的,並且最後得到的結果是全域性最優的。455.分發餅乾 題目描述 每個孩子都有乙個滿足度,每個餅乾都有乙個大小,只有餅乾的大小大於等於乙個孩子的滿足度,該孩子才會獲得滿足。求解最多可以獲得滿足的孩子數量。示例 輸入 1,2,3 1,1 輸出 1 解釋 你有三個孩子和兩塊小餅...