貪心演算法的證明(貪心策略是安全的)

2021-08-02 20:46:57 字數 1247 閱讀 6187

由於最近考演算法,經常會遇到要求證明貪心演算法中,貪心策略及貪心選擇是正確的。

由於這塊涉及到胚和擬陣的問題,書上僅在貪心演算法章節的描述過於抽象,以至於我真的是頭大了很久才算弄懂。

這裡不過多複述貪心演算法和動態規劃的區別,以及具體的應用條件、性質,僅描述如何理解「貪心選擇是安全」,即證明貪心演算法的正確性。

這裡使用的教材是《演算法導論》第二版

用課本的「活動選擇問題」來闡述如何理解貪心演算法證明與安全問題。

這是書上關於「貪心選擇正確性」的主要證明定理。

十分的抽象……

但我這裡結合網上一些描述,提出乙個比較容易理解的概念。

貪心演算法和動態規劃本質的不同是,貪心演算法可以通過乙個選擇策略,直接得到乙個區域性最優解,而不需要通過遞迴遍歷。

網上有一些描述「貪心策略證明」的方法是這麼說的:

考察乙個問題的最優解,證明可修改該最優解,使得其從貪心選擇開始,然後用數學歸納法證明每一步都可以通過貪心選擇得到最優解

1,假定首選元素不是貪心選擇所要的元素,證明將首元素替換成貪心選擇所需元素,依然得到最優解;

2,數學歸納法證明每一步均可通過貪心選擇得到最優解

實際上也十分的抽象,比如第一句其實我就沒太懂什麼意思。

這裡我提出以下自己的理解:

模擬動態規劃,當對原問題進行分解的時候,我們假設分解為子問題a(待解決)與子問題b(待遞迴分解)。

動態規劃需要採取自底向上或者是記錄型的自頂向下,也就是遍歷一切可能,得到乙個最優解,合併解決原問題。

貪心選擇,可以採取自頂向下,也就是直接解決子問題a,然後繼續對子問題b進行分解。

解決子問題a的策略交貪心策略,也就是貪心選擇。

需要證明貪心選擇正確性,以活動選擇問題來看。

1.若運用貪心策略,將在子問題a中,選擇a作為區域性最優解。

2.此時,證貪心策略是正確的,其實是證,不採取貪心策略下,原問題的最優解中,也包含a

3.假設,此時子問題a中沒有選擇a,證子問題b(遞迴中與合併後)中的選擇一定包含a

4.此時,可以使用最簡單的證法,也就是動態規劃的自底向上遞迴。由於a在切分掃瞄中,一定被選中

5.由4可得3,也就是得到了「貪心策略選擇的區域性最優解,一定包含在全域性最優解之中」

以上的描述,僅為本人理解,原理基於書中定理16.1,其實是證最大相容子集問題。

ps:獻醜了……僅為本人筆記用

貪心演算法證明的回憶

關於貪心選擇證明的理解,突然有點想不通了。拿最簡單的活動安排問題,我在想貪心選擇先找f1,然後剩下的2 n逐個找能與之前相容的活動,按照f 不遞減序排列。如果存在乙個最優解,第乙個活動是k,那麼 k後面的活動自然與 f1 相容,但是k前面的呢,可能就會與s1 f1 不相容了,記得當年演算法書證明這個...

貪心演算法並不難,難的是證明。

貪心算 法並不難 難的是 證明 貪心演算法並不難,難的是證明。貪心演算法並不 難,難的 是證明。heidoudou 基本思路 先將陣列sor tsort sort 一遍,然後用雙指標i 1,j n,if ai a j w if a i a j w if ai aj w 則將a ja j aj 單獨分...

貪心演算法的證明題

貪心演算法的證明一般是比動態規劃要複雜。原因是貪心演算法的證明有兩個,乙個是最優子結構,另外乙個是貪心選擇性質。貪心選擇性質 可以通過區域性最優選擇來構造全域性最優解 證明 一般考慮某個子問題的最優解,然後考慮用乙個貪心選擇替換其中某個選擇,修改此解,匯出更小子問題。最優子結構同動態規劃,而且其實一...