圖的匹配問題與最大流問題(一)

從今天開始,準備寫個系列,關於圖的匹配,最大流,線性規劃等這些圖論中的重要而且有着千絲萬縷連續的問題,順便介紹求圖的最大匹配問題的著名的匈牙利算法。算是對前段時間學習的一個小結吧。Ps:本人自認很水,多多見諒。(對內容進行了部分修改,原來使用Word編輯的公式這裏無法顯示,只能截圖了)

首先這次就先從基本的概念介紹起,順便說說這之間的一些聯繫,接下來再開始一一上算法。

一、圖的匹配問題

我們日常中聽過最多的圖的匹配問題可能就是著名的結婚問題: 在一個集合中,有m個女生,s個男生,其中1<=r<=s,設集合S1, S2, …,Si,.. ,Sm 分別代表第i個女生喜歡的男生的集合(當然一個女生可以喜歡多個男生),問有沒有可能最終令這m個女生都能夠和自己心儀的男生結婚?

         這個問題我們最直觀的想法是,首先必須保證,任意r(<=m)個女生喜歡的男生數量必須大於等於r。這是很直觀的,比如3個女生如果同時只喜歡上2個男生,則無論如何也無法分配。

而正是這一直觀的想法,解決了這一問題。從上面可知,最終能夠令m個女生都能和自己心儀的男生結婚的必要條件就是任意r個女生喜歡的男生的數量必須大於等於r。而通過證明,我們知道這一條件也是充分的。這一證明並不是本文的重點,所以這裏略過,有興趣,可以繼續討論。

這一問題就是圖的最大匹配問題。不過更一般的我們常說的圖的最大匹配問題是這樣描述的:對於一個二部圖,其最大匹配是多少?如圖,所示,最大匹配爲4.

 

二、最大流問題

最大流問題是一個很經典的問題,很多人對此也很熟悉,它能夠等同於一個線性規劃問題。下面給出最大流問題的一個基本描述:如下圖所示,s是源點,t爲匯點,每條邊上數字的含義是邊能夠允許流過的最大流量。可以將邊看成管道,0/3代表該管道每秒最多能通過3個單位的流量,0代表當前流量。最大流問題即是說,從s點到t點,最大允許流量是多少?


那它跟線性規劃又是如何產生聯繫的呢?這裏我們先簡要介紹下。


的流量等於流出該點的流量。這個可以理解爲流量守恆,就如同電流一樣,流入一個電阻的電流必然等於流出的電流。

那麼最大流就可以表示爲:


三、聯繫

1.      最大流等於最大二分匹配

如圖所示,對於一個二分圖,令已有的邊的容量(Capacity)爲無窮大,增加一個源點s和一個匯點t,令s和t分別連接二部圖中的一個分步,並設置其容量爲1。這時,計算得到的最大流就等於最大二分匹配。這裏的證明也會比較複雜,需要用到最大流等於最小割定理,我們以後再詳細說。


2.      匈牙利算法

用最大流問題的複雜度爲O(VE*E),而匈牙利算法是專門用來解決圖的最大匹配問題的算法,其複雜度可以達到O(VE)。其中V代表點的數量,E代表邊的數量。這是一種充分挖掘了最大匹配問題內在規律後的得到的算法,非常聰明。

3.      線性規劃

上面說到了,求最大流問題可以轉換爲線性規劃問題。而線性規劃問題最著名的解法自然就是單純形法。這種算法非常奇特,其複雜度爲在最壞情況下是指數級的,但其在實踐中絕大多數的情況下表現出的效率非常令人滿意。而後來提出的能夠在多項式時間解決線性規劃問題的算法實踐中表現反而沒有單純形法好。而正因爲這,後來有人提出了著名的算法的平滑分析法。

4.      最大流問題其他妙用

最大流問題除了能夠解決最大匹配問題外,還有其他的許多妙用。這裏我們會介紹的是用最大流來解決圖的點連通度和邊連通度問題。點連通度是指對於一個連通圖,最少刪去多少點才能夠使其變爲非連通圖。邊連通度是指對於一個連通圖,最少刪去多少條邊才能夠使其變爲非連通圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章