由於考試算法中用到貪心時需要先證明其正確性才能使用,所以本人學習了一下貪心算法的證明方法並作此筆記。
首先,在網上找到的貪心策略證明有:
考察一個問題的最優解,證明可修改該最優解,使得其從貪心選擇開始,然后用數學歸納法證明每一步都可以通過貪心選擇得到最優解
1,假定首選元素不是貪心選擇所要的元素,證明將首元素替換成貪心選擇所需元素,依然得到最優解;
2,數學歸納法證明每一步均可通過貪心選擇得到最優解
本人對此的理解就是當前你有一個最優解,然后我們將這個最優解分為兩塊,前邊和后邊都是對應集合的最優解,我們最后邊的最優解,從下一步選擇開始使用貪心選擇對其中的元素進行替換,之后仍然是最優解,這就證明了貪心的正確性。
注:要特別注意,貪心是求得一個最優解,而不是求得唯一的最優解。
(1)如果bm = bi,擇仍然為最優解
(2)如果bm != bi,則需要證明去除bi,加入bm仍然構成最優解即可。
下邊我們來用貪心的一個經典例子,活動安排來講解此問題。
1.首先,我們有一個最優解A,對這個最優解進行討論
2.對這里邊的第一個活動,若他是結束時間最早的活動,符合貪心,若不是,可以將第一個活動改為結束最早的活動(一定可以替換),所以當k = 1時,貪心正確。
3.推廣到k > 1,對A的子集,我們已經選擇可k個活動,構成Ak,下邊我們進行第 k+1 個活動的選擇,(注意,我們選擇的前提是與Ak相容,貪心算法時選擇的也是相容的最早結束的活動),原本我們的最優解扣去Ak后剩余B,對第k+1個活動的選取,我們選取結束最早的且相容的活動bm,若bm在B中,顯然貪心成立,若bm不在b中,我們取出B中結束最早的活動bi,將bm加入其中,仍然不改變最優解的性質,貪心算法得到證明。
注:貪心算法證明的要義 1.選擇一個普通的最優解 2.用貪心選擇來替換其中的某一步選擇時最優解性質不變,數學歸納證明其正確性。