



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Pku (2239 2727 1274=1149 2584 2536 2446簡單)1449 1325 3189 3041設G=(V,R)是一個無向圖。如頂點集V可分割為兩個互不相交的子集,并且圖中每條邊依附的兩個頂點都分屬兩個不同的子集。則稱圖G為二分圖。1 給定一個二分圖G,在G的一個子圖M中,M的邊集E中的任意兩條邊都不依附于同一個頂點,則稱M是一個匹配。2選擇這樣的邊數最大的子集稱為圖的最大匹配問題3 如果一個匹配中,圖中的每個頂點都和圖中某條邊相關聯,則稱此匹配為完全匹配,也稱作完備匹配。最大匹配在實際中有廣泛的用處,求最大匹配的一種顯而易見的算法是:先找出全部匹
2、配,然后保留匹配數最多的。但是這個算法的復雜度為邊數的指數級函數。因此,需要尋求一種更加高效的算法。匈牙利算法是求解最大匹配的有效算法,該算法用到了增廣路的定義(也稱增廣軌或交錯軌):若P是圖G中一條連通兩個未匹配頂點的路徑,并且屬M的邊和不屬M的邊(即已匹配和待匹配的邊)在P上交替出現,則稱P為相對于M的一條增廣路徑。由增廣路徑的定義可以推出下述三個結論:1. P的路徑長度必定為奇數,第一條邊和最后一條邊都不屬于M。2.P經過取反操作(即非M中的邊變為M中的邊,原來M中的邊去掉)可以得到一個更大的匹配M。3. M為G的最大匹配當且僅當不存在相對于M的增廣路徑。從而可以得到求解最大匹配的匈牙利
3、算法: (1)置M為空(2)找出一條增廣路徑P,通過取反操作獲得更大的匹配M代替M(3)重復(2)操作直到找不出增廣路徑為止根據該算法,我選用dfs (深度優先搜索)實現。程序清單如下:int matchi /存儲集合m中的節點i在集合n中的匹配節點,初值為-1。int n,m,match100; /二分圖的兩個集合分別含有n和m個元素
4、。bool visit100,map100100; /map存儲鄰接矩陣。bool dfs(int k)int t;for(int i = 0; i < m; i+) if(mapki && !visiti) visiti = true; t
5、 = matchi; matchi = k; /路徑取反操作。 if(t = -1 | dfs(t) /尋找是否為增廣路徑
6、; return true; matchi = t; return false;int main()/. int s = 0; memset(match,-1,sizeof(match); for(i = 0; i < n; i+) &
7、#160; /以二分集中的較小集為n進行匹配較優 memset(visit,0,sizeof(visit); if(dfs(i) s+; /s為匹配數 /.return 0;什么是二分圖,什么是二分圖的最
8、大匹配,這些定義我就不講 了,網上隨便都找得到。二分圖的最大匹配有兩種求法,第一種是最大流(我在此假設讀者已有網絡流的知識);第二種就是我現在要講的匈牙利算法。這個算法說 白了就是最大流的算法,但是它跟據二分圖匹配這個問題的特點,把最大流算法做了簡化,提高了效率。匈牙利算法其實很簡單,但是網上搜不到什么說得清楚的文 章。所以我決定要寫一下。最大流算法的核心問題就是找增廣路徑(augment path)。匈牙利算法也不例外,它的基本模式就是:初始時最大匹配為空while 找得到增廣路徑 do 把增廣路徑加入到最大匹配中去可見和最大流算法是一樣的。但是這里的增廣
9、路徑就有它一定的特殊性,下面我來分析一下。(注:匈牙利算法雖然根本上是最大流算法,但是它不需要建網絡模型,所以圖中不再需要源點和匯點,僅僅是一個二分圖。每條邊也不需要有方向。)圖1 圖2圖1是我給出的二分圖中的一個匹配:1,5和2,6。圖2就是在這個匹配的基礎上找到的一條增廣路徑:3->6->2->5->1->4。我們借由它來描述一下二分圖中的增廣路徑的性質:(1)有奇數條邊。(2)起點在二分圖的左半邊,終點在右半邊。(3)路徑上的點一定是一個在左半邊,一個在右半邊,交替出現。(其實二分圖的性質就決定了這一點,因為二分圖同一邊的點之間沒有邊相連,不要忘記哦。)(4
10、)整條路徑上沒有重復的點。(5)起點和終點都是目前還沒有配對的點,而其它所有點都是已經配好對的。(如圖1、圖2所示,1,5和2,6在圖1中是兩對已經配好對的點;而起點3和終點4目前還沒有與其它點配對。)(6)路徑上的所有第奇數條邊都不在原匹配中,所有第偶數條邊都出現在原匹配中。(如圖1、圖2所示,原有的匹配是1,5和2,6,這兩條配匹的邊在圖2給出的增廣路徑中分邊是第2和第4條邊。而增廣路徑的第1、3、5條邊都沒有出現在圖1給出的匹配中。)(7)最后,也是最重要的一條,把增廣路徑上的所有第奇數條邊加入到原匹配中去,并把增廣路徑中的所有第偶數條邊從原匹配中刪除(這個操作稱為增廣路徑的取反),則新
11、的匹配數就比原匹配數增加了1個。(如圖2所示,新的匹配就是所有藍色的邊,而所有紅色的邊則從原匹配中刪除。則新的匹配數為3。)不難想通,在最初始時,還沒有任何匹配時,圖1中的兩條灰色的邊本身也是增廣路徑。因此在這張二分圖中尋找最大配匹的過程可能如下:(1)找到增廣路徑1->5,把它取反,則匹配數增加到1。(2)找到增廣路徑2->6,把它取反,則匹配數增加到2。(3)找到增廣路徑3->6->2->5->1->4,把它取反,則匹配數增加到3。(4)再也找不到增廣路徑,結束。當然,這只是一種可能的流程。也可能有別的找增廣路徑的順序,或者找到不同的增廣路徑,最終
12、的匹配方案也可能不一樣。但是最大匹配數一定都是相同的。對于增廣路徑還可以用一個遞歸的方法來描述。這個描述不一定最準確,但是它揭示了尋找增廣路徑的一般方法:“從點A出發的增廣路徑”一定首先連向一個在原匹配中沒有與點A配對的點B。如果點B在原匹配中沒有與任何點配對,則它就是這條增廣路徑的終點;反之,如 果點B已與點C配對,那么這條增廣路徑就是從A到B,再從B到C,再加上“從點C出發的增廣路徑”。并且,這條從C出發的增廣路徑中不能與前半部分的增廣 路徑有重復的點。比如圖2中,我們要尋找一條從3出發的增廣路徑,要做以下3步:(1)首先從3出發,它能連到的點只有6,而6在圖1中已經與2配對,所以目前的增
13、廣路徑就是3->6->2再加上從2出發的增廣路徑。(2)從2出發,它能連到的不與前半部分路徑重復的點只有5,而且5確實在原匹配中沒有與2配對。所以從2連到5。但5在圖1中已經與1配對,所以目前的增廣路徑為3->6->2->5->1再加上從1出發的增廣路徑。(3)從1出發,能連到的不與自已配對并且不與前半部分路徑重復的點只有4。因為4在圖1中沒有與任何點配對,所以它就是終點。所以最終的增廣路徑是3->6->2->5->1->4。但是嚴格地說,以上過程中從2出發的增廣路徑(2->5->1->4)和從1出發的增廣路徑
14、(1->4)并不是真正的增廣路徑。 因為它們不符合前面講過的增廣路徑的第5條性質,它們的起點都是已經配過對的點。我們在這里稱它們為“增廣路徑”只是為了方便說明整個搜尋的過程。而這兩 條路徑本身只能算是兩個不為外界所知的子過程的返回結果。顯然,從上面的例子可以看出,搜尋增廣路徑的方法就是DFS,可以寫成一個遞歸函數。當然,用BFS也完全可以實現。至此,理論基礎部份講完了。但是要完成匈牙利算法,還需要一個重要的定理:如果從一個點A出發,沒有找到增廣路徑,那么無論再從別的點出發找到多少增廣路徑來改變現在的匹配,從A出發都永遠找不到增廣路徑。要用文字來證明這個定理很繁,話很難說,要么我還得多畫一張圖,我在此就省了。其實你自己畫幾個 圖,試圖舉兩個反例,這個定理不難想通的。(給個提示。如果你試圖舉個反例來說明在找到了別的增廣路徑并改變了現有的匹配后,從A出發就能找到增廣路徑。 那么,在這種情況下,肯定在找到別的增
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園小班社會教案《好朋友》
- 邯鄲燃氣面試題及答案
- 綠色轉型面試題及答案
- 頭盔安全教育
- 清明節傳統文化教育
- 2025年生蠔項目立項申請報告
- 江陰保姆面試題及答案
- 浦發java面試題及答案
- 綜合管理考試試題及答案
- 計劃觀點面試題及答案
- 公共衛生倫理問題試題及答案討論
- 潞安化工集團招聘考試題庫
- 學生欺凌防治工作“一崗雙責”制度
- 廣西水利安全員C證考試復習題(附答案)
- 大風能互補照明系統的小型風力發電機優化設計
- 定點零售藥店醫保管理制度
- 鐵路設計專業畢業論文
- 2024北京海淀區初一(下)期末生物試題和答案
- YY/T 1944-2024醫用X射線高壓發生器專用技術條件
- 國開學習網《數據庫運維》形考任務1-3答案
- 2023年中國醫學科學院基礎醫學研究所高等學校招聘筆試真題
評論
0/150
提交評論