關於貪心選擇證明的理解,突然有點想不通了。。。
拿最簡單的活動安排問題,我在想貪心選擇先找f1,然後剩下的2->n逐個找能與之前相容的活動,按照f 不遞減序排列。如果存在乙個最優解,第乙個活動是k, 那麼 k後面的活動自然與 f1 相容,但是k前面的呢,可能就會與s1 f1 不相容了,記得當年演算法書證明這個挺漂亮的,而且考試還考了一道8分的證明。
後來翻翻書,發現證明過程乙個橫重要的細節忽視了,不管是貪心解還是 某乙個最優解,都要把活動按照f 不遞減排序。所以最優解第乙個活動一定是解裡面活動結束最早的,所以剩下的活動必與 f1相容。
最優子結構其實就是之前dp的剪下技術,假設e是最優解,如果e'=e- 存在乙個更優解,替換掉原最優解,則導致乙個全域性更優的解,這與之前解是最優產生矛盾,然後每一步貪心產生更小規模的子問題,直至最優解匯出。
所以思路就是兩步,第一步貪心選擇,一定要找到了乙個類似於按照活動結束時間排序這樣乙個預處理,然後在此基礎上用替換的方式,發現其他方式產生的最優解最多與貪心產生的最優解一樣,不可能更優,因此可以說貪心解最優,因為不要求把所有最優解羅列。
第二步,最有子結構,剪下技術,產生與假設想矛盾,因此不存在裡面更優的解。
雖然曹博的ppt,還有扶欄小炒肉大神說過,貪心選擇可能是題目的難點,因為證明具有這種性質往往是困難的,所以你不知道你想出的乙個貪心策略是否可以達到全域性最優解。但是一旦弄出來,就是漂亮的演算法,dijstra(一直對於證明有點疑惑), prim kruskal huffmancode 等等,效率很高
貪心演算法的證明題
貪心演算法的證明一般是比動態規劃要複雜。原因是貪心演算法的證明有兩個,乙個是最優子結構,另外乙個是貪心選擇性質。貪心選擇性質 可以通過區域性最優選擇來構造全域性最優解 證明 一般考慮某個子問題的最優解,然後考慮用乙個貪心選擇替換其中某個選擇,修改此解,匯出更小子問題。最優子結構同動態規劃,而且其實一...
貪心演算法的證明(貪心策略是安全的)
由於最近考演算法,經常會遇到要求證明貪心演算法中,貪心策略及貪心選擇是正確的。由於這塊涉及到胚和擬陣的問題,書上僅在貪心演算法章節的描述過於抽象,以至於我真的是頭大了很久才算弄懂。這裡不過多複述貪心演算法和動態規劃的區別,以及具體的應用條件 性質,僅描述如何理解 貪心選擇是安全 即證明貪心演算法的正...
貪心演算法正確性證明
貪心演算法正確性證明 wiki定義 貪心演算法 英語 greedy algorithm 又稱貪婪演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是最好或最優的演算法。比如在旅行推銷員問題中,如果旅行員每次都選擇最近的城市,那這就是一種貪心演算法。用大白話說...