日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

匈牙利算法与套题

發布時間:2024/1/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匈牙利算法与套题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匈牙利算法與套題


匈牙利算法是利用增廣路來找二分圖里的最大匹配問題。

二分圖的概念:

設G=(V, E)是一個無向圖。如果頂點集V可分割為兩個互不相交的子集U和V,并且圖中每條邊連接的兩個頂點一個在U中,另一個在V中,則稱圖G為二分圖。

如何判斷給你的圖為一個二分圖:染色法(BFS判斷)

  • 染色法就是將二分圖中的兩個不相關的子區間染成不同顏色(如上圖中U被染成藍色,V被染成綠色),這樣在這個圖里面的每條邊的端點都是不同的顏色。 — wiki
  • 所以在一個圖中,我們隨便從一個點從0開始進行BFS(廣度優先搜索),每次搜索到的點先進行判斷是否被搜過,如果沒有被搜過,那么這個搜到的點 = 目前的點+1.如果被搜過,就要判斷兩個值是否同奇或者同偶,如果不滿足同奇或者同偶,就說明不滿足染色法,就不是一個二分圖。

下面是一個圖,用染色法標記發現它是一個二分圖

上面的圖轉換成二分圖為:

二分圖中幾個小知識:

  • 匹配:根據染色法邊集E的任意兩條邊不依附同一個頂點
  • 最大匹配:最大匹配數也是最小覆蓋數,要到把當前二分圖中的匹配數找到不能找為止
  • 完全匹配:匹配完圖G中所有點。
  • 取反:在一條增廣路中,把未匹配的變成匹配并把匹配的變成未匹配
    • 注:完全匹配一定是最大匹配,最大匹配不一定是完全匹配。
  • 增廣路的概念:

    在網上搜了一下增廣路發現有點看不懂:

    • 若P是圖G中一條連通兩個未匹配頂點的路徑,并且屬于M的邊和不屬于M的邊(即已匹配和待匹配的邊)在P上交替出現,則稱P為相對于M的一條增廣路徑(舉例來說,有A、B集合,增廣路由A中一個點通向B中一個點,再由B中這個點通向A中一個點……交替進行)。 —百度百科

    然后在網上瘋狂找資料找到了一個易懂的:通過交替路找增廣路

    • 交替路:再G中的邊,匹配的邊和未被匹配的邊交替出現
    • 增廣路:從未匹配的邊開始,走交替路,并以未匹配的邊結束。

    匈牙利算法:

  • 置M為空。
  • 用DFS(深度優先搜索)尋找增廣路,取反獲得最大匹配M’代替M。
  • 重復2,直到找不到增廣路為止。
    注: M為二分圖以匹配邊的集合。
  • 當時我在這里不理解,為什么找到了增廣路取反得到的新M集合(M’)就要比舊M集合更優?

    其實這里你畫一下圖就很好理解了,這里我先用文字描述一下:因為增廣路是從未匹配開始到未匹配結束,所以你對增廣路取反必定會在原來匹配邊的基礎上增加一條匹配邊。

    如下圖:上圖為舊M集合,下圖為取反后的新M集合。可看出取反后的M集合里的匹配條數多了一條。

    匈牙利算法題集:

    匈牙利板子題:POJ3041

    題意:輸入兩個數n,m。n為點集,m為邊集。然后m組數據是從X點集到Y點集的邊。要你求最小覆蓋數,也就是最大匹配數。
    點擊查看代碼(DFS+鄰接矩陣)
    點擊查看代碼(BFS+鄰接矩陣)

    hdu2063

    點擊查看代碼(BFS+鄰接矩陣)

    二分圖判定:hihocoder1121

    BFS+鄰接表


    參考資料:

    趣寫算法系列之–匈牙利算法
    匈牙利算法
    二分圖匹配——匈牙利算法和KM算法
    二分圖的最大匹配、完美匹配和匈牙利算法

    總結

    以上是生活随笔為你收集整理的匈牙利算法与套题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。