圖$G$的一個 最大匹配 ,指邊數最多的匹配。
最大匹配 可能有不止一個,但 最大匹配 的邊數是確定的,並且不可能超過圖中頂點數的一半。
一張圖$G=(V,E)$
$\forall e \in E$存在一個函數$w(e)$表示$e$的權重
最大權最大匹配 允許負權邊$(w(e)<0)$
但是 最大權匹配 不會有負權邊
在$G$為完全圖且沒有負權邊時
最大權最大匹配 = 最大權匹配令 $K = max(\{\abs{w(e)}: e \in E ,\; w(e) ≤ 0 \}) + 1 $
若沒有負權邊或零邊則$K = 0$把圖$G$中所有的邊其權重$w(e)$加上$K$產生一張新圖$G'=(V,E')$
此時的新圖$G'$不存在負權邊和零邊
最大權最大匹配 不一定等於 最大權匹配
但是把所有邊的邊權加上一個超大數字$P$的話
最大權匹配 的結果就是 最大權最大匹配
令$P = \sum{w(e): e \in E'}$
把圖$G'$中所有的邊其權重$w(e)$加上$P$同一張圖上的兩種匹配$M$和$M^*$也可以計算對稱差集
$M⊕M^*$總共會產生六大類 connected component這樣基本問題就解決了,來計算一下時間複雜度
因為一朵花最少有三個點,縮花後成為一個點
由此推得:N個點的圖建立一棵交錯樹,最多縮花N/2次
之前有討論過bfs加上縮花的時間為$\ord{|E|+|V|}$
總共會進行$|V|$次bfs
$ max \; \sum_{e∈E} \; w(e)x_e $
限制:
$x_e ≥ 0 \; : \forall e∈E $
$ x(δ(u)) = 1 \; : \forall u∈V $
$ min \; \sum_{u \in V} \; z_u $
限制:
$z_e ≥ 0 \; : \forall e∈E $
在原始問題中,我們發現只要在$x_e \in \{0,1\} \; : \forall e \in E $時
$x_e = 1$的邊就是匹配邊,$x_e = 0$的邊就是非匹配邊
我們稱$z_u$為u的vertex labeling
稱$z_e=0$的邊為等邊(Equality Edge)
以「等邊」的概念,結合之前的匈牙利算法:
用「等邊」構成的增廣路不斷進行擴充
由於用來擴充的邊全是「等邊」
最後得到的最大權完美匹配當然全是「等邊」
設交錯樹 $ T = (U_t,V_t) $
令 $ d = min(\{z_e : e \in δ(V_t)\})$
設$u^+$為樹上偶點,$v^-$為樹上奇點
讓 $z_{u^+}$-= $d, \;$$z_{v^-}$ += $d$
vertex labeling 額外增加一個限制:
對於所有匹配點$z_u > 0$
dfs花$\ord{|V|^2}$的時間
因為交錯樹最多有$|V|-1$條邊
故主程式裡的無限迴圈最多執行$\ord{|V|}$次
總共有$|V|$個點需要被增廣
總複雜度為:$ max \; \sum_{e∈E} \; w(e)x_e $
限制:$ min \; \sum_{u \in V} \; z_u + \sum_{B \in O} \; \floor{\frac{|B|}{2}} z_B $
限制:
$z_B ≥ 0 \; : \forall B∈O $
$z_e ≥ 0 \; : \forall e∈E $
和二分圖一樣
我們必須滿足$x_e \in \{0,1\} \; : \forall e∈E $
因此必須在最大權完美匹配的時候
讓所有匹配邊都是等邊
在$x(\gamma(B))=\floor{\frac{|B|}{2}}$且$x(δ(B)) = 1$時
讓$z_B>0$就可以了
以「等邊」的概念,結合之前的帶花樹算法:
用「等邊」構成的增廣路不斷進行擴充
由於用來擴充的邊全是「等邊」
最後得到的最大權完美匹配當然全是「等邊」
遇到花的時候,要把它縮成一個偶點
把花中所有點都設為偶點,並讓他的$z_B=0$
因為花也有可能縮成點被加入queue中
且花的數量是不固定的
因此我們不能像之前一樣枚舉每個點看看有沒有增廣路
所以在BFS的時候必須要把所有未匹配點都丟到queue中
以$u^-$來表示$u$在交錯樹上為奇點
以$u^+$來表示$u$在交錯樹上為偶點
以$u^{\varnothing}$來表示$u$不再任何一棵交錯樹上
設目前有$r$棵交錯樹 $ T_i = (U_{t_i},V_{t_i}) \; : 1≤i≤r$
令
$ d1 = min(\{z_e: e=(u^+,v^{\varnothing})\})$
注意這裡$B$是縮花之後的點,所以可以有奇偶性
設$d=min(d1,d2,d3)$
讓
$ \quad z_{u^+}$ -= $d$
$ \quad z_{v^-}$ += $d$
$ \quad z_{B^+}$ += $2d$
$ \quad z_{B^-}$ -= $2d$
vertex labeling 額外增加一個限制:
對於所有匹配點$u$,$z_u > 0$
如果你使用
get_pr(b2,11) flower[b2] 會變成{9,10,11,2,3,4,b1} 並回傳2 如果你使用 get_pr(b2,2) flower[b2] 會變成{9,b1,4,3,2,11,10} 並回傳4 |