接上文:http://blog.csdn.net/jj12345jj198999/article/details/6631122
稠密圖中的最優匹配【Q9】【標題3】
在無向圖G=(V,E)中一個匹配也就是一個沒有公用頂點的邊的集合。(一條邊對應於兩個點,一個點不可能對應於多餘一個頂點)最大匹配是一個無法拓展的問題,意味著所有其他的邊都至少與一個匹配的頂點相連。一個最大匹配也就是一個最大集。(一個最大匹配總是最大的,但是反過來說卻未必正確)在圖中一個擁有n條邊和2n個點的匹配被稱為最優匹配。(顯然也是最大的)在這個例子中我們考慮一種很有限的情況。我們假設圖中有2n個點,所有頂點的度都至少為n。可知在這些條件下總存在一個最優匹配。我們首先給出這個事實的證明,然後展示如何去修改這個證明從而得到一個尋找最優匹配的演算法。
證明採用的是最大的反例。考慮一個圖G=(V,E),其中|V|=2n每個頂點的度至少為n。如果n=1那麼這個圖僅僅有一條邊串連兩個頂點,這就是一個最優匹配。假設n>1時不存在這樣一個最優匹配。考慮到最大匹配M屬於E。由假設知|M|<n,同時由於任意一條邊自己就是一個匹配顯然有|M|≥1。既然M不是完全的(不包括所有的點),那麼就存在至少兩個不相鄰點v1和v2不被包含在M中(即它們不對應M中的一條邊)。這兩個點至少有2n個不同的邊從它們射出。所有這些邊通向那些包含在M中的頂點,否則這樣的邊就不可能被加入到M中。由於M中邊的數目小於n而且從v1到v2有2n條邊與之相連,M中至少有一條邊,假定為(u1,u2),與從v1到v2的三條邊相連。為了不失一般性,我們假設這三條邊是(u1,v1),(u1,v2)和(u2,v1)(見圖6)。很容易可以看到通過從M中移除(u1,u2)加上邊(u1,v2)和(u2,v1)我們能夠得到一個更大的匹配,這與之前最大的假設相矛盾。
插入圖6
第一眼看上去這個證明好像無法產生一個演算法,因為證明是從一個最大匹配開始的。一旦我們知道如何去尋找這樣一個匹配我們就能夠解決這個問題。然而,使用反證法適用於任何最大化的匹配,這裡展示的只是用於最大匹配而已。尋找一個最大化的匹配要比尋找一個最大匹配簡單。我們只需要簡單的添加不相連的邊(即那些沒有公用頂點的邊)直到不存在這樣的邊的可能。然後我們使用上面描述的步驟把該匹配轉換為一個更大的匹配。通過上面的證明我們可以不斷反覆執行直到找到一個最優匹配。
其他證明技巧【標題2】
在這篇論文中我們關注於基于歸納法的證明技巧。這裡有很多其他的技巧和更多的類比,一些事很明顯的,一些則不那麼明顯。許多數學定理的證明是使用一系列的前提得到的,這直接對應於在標準設計和結構化編程的思想。證明中使用反證法在演算法設計中也有類似的地方。研究那些使用“類似的論據”證明的類比是很有趣的一件事。
我們這裡簡要列出四個證明技巧(其中的三個是基于歸納法的)以及它們的類比。更多的例子和類比可以在參考文獻[12]中找到。
縮減法【標題3】
在證明定理和設計演算法時,在問題之間使用縮減是一種很強大的技巧。如果問題A被指明是問題B的特例,那麼解決B的演算法可以被當成一個黑盒用來解決A。這個技巧對於解決下界和對問題進行分類也很有效(例如NP-完全問題)。如果已知問題A很難,那麼問題B也至少一樣難。
雙倍歸納法【標題3】
這是一種使用歸納法針對一次多餘一個變數的方法。它可用於在歸納法最佳序列不明確的情況,同時在針對幾個變數依據一個特定的步驟在其中進行選擇時,該方法也很容易使用到。例如,如果問題包含n個物品和一個k維空間時,我們可能想在演算法執行時減少物品的數量或者物品尺寸的數量【見例4】。