T-Join
T-Join
在一張圖上選出偶數個點(通常標作T集合,也就是T-Join的T;因為是代表集合,所以T要大寫),然後再選出許多條邊,讓選中的點都是連著奇數條選中的邊,讓沒選中的點都是連著偶數條選中的邊,這些邊就叫做一個T-Join。
這個定義是參考Euler Path設計出來的。各位如果熟悉Euler Path的起點和終點是「奇點」,中繼點是「偶點」,那麼就能了解這個定義的前因後果了!在圖上選出的偶數個點,正是Euler Path的起點和終點。額外添上幾個環,便是T-Join了。
Minimum Weight T-Join
一張無向圖上,邊的權重總和最小的T-Join,可能有許多種。
Minimum Weight T-Join可以看作是Matching的「匹配邊」改成了「匹配路徑」。匹配路徑數量是T的一半。每一條匹配路徑,顯然必須是最短邊互斥路徑。
Minimum Weight T-Join是「最短邊互斥路徑」與「最小權匹配」兩者結合,同時具有兩者性質。
一、最短邊互斥路徑性質:一個Minimum Weight T-Join由許多條匹配路徑組成,數量是T的一半。每一條匹配路徑,都是最短邊互斥路徑。
二、最小權匹配性質:兩種Minimum Weight T-Join的互斥聯集,仍是一種Minimum Weight T-Join。詳細的數學式子是:
Minimum Weight (A⊕B)-Join = Minimum Weight A-Join ⊕ Minimum Weight B-Join。
⊕是對稱差集,也就是XOR。這個數學式子是XOR分配律。
正權重圖的Minimum Weight T-Join演算法
一、替T求出所有兩點之間的最短路徑長度。 二、替T找一個最小權匹配。此即Minimum Weight T-Join。
第一步根據最短邊互斥路徑性質,第二步根據最小權匹配性質。
正權重圖的情況下,最短邊互斥路徑等同最短路徑。
正權重圖的情況下,所有匹配路徑,絕不會有邊重疊。兩條匹配路徑,一旦有邊重疊,只要去掉重疊的邊,仍然形成兩條匹配路徑,而且勢必形成權重更小的T-Join。
負權重圖的Minimum Weight T-Join演算法【尚待確認】
只適用於沒有負環的情況。有負環成為NP-complete問題。
負權重圖改為正權重圖,然後利用正權重圖的Minimum Weight T-Join反向推導負權重圖的Minimum Weight T-Join。
一、圖上所有負邊,恰好構成Minimum N-Join。 N是所有負邊的所有端點,而且重複次數是奇數。 N是連著奇數條負邊的點。 二、原圖所有負邊變號,得到新圖。 求出新圖的Minimum Weight (T⊕N)-Join。 三、新圖的Minimum Weight (T⊕N)-Join, 原圖的Minimum N-Join, 兩者的互斥聯集,即是原圖的Minimum Weight T-Join。
我目前讀過的文獻,正確性證明千篇一律存在漏洞。
證明方式:原圖的Minimum T-Join,嘗試放到新圖上面。
w(T̅) = w(T̅-N̅) + w(T̅∩N̅) = w(T̅-N̅) - w(N̅-T̅) + w(N̅-T̅) + w(T̅∩N̅) = |w|(T̅-N̅) + |w|(N̅-T̅) + w(N̅-T̅) + w(T̅∩N̅) ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ = |w|(T̅⊕N̅) + w(N̅) ^^^^^^^^ ^^^^ = |w|(T⊕N) + w(N̅) T:取偶數個點。 T̅:Minimum Weight T-Join的所有邊。 N:所有負邊的所有端點,而且重複次數是奇數。 N̅:所有負邊。顯然構成了Minimum Weight N-Join。 T⊕N:T和N的互斥聯集。 T⊕N:Minimum Weight (T⊕N)-Join的所有邊。 w():每條邊的權重總和。 |w|():每條邊的權重,先取絕對值(所有負邊變號)再總和。 w(T̅):Minimum Weight T-Join的權重。 w(N̅):Minimum Weight N-Join的權重。所有負邊的權重總和。
當|w|(T⊕N)達到最小值,而w(N̅)是常數,則w(T̅)也達到最小值。
大家只證明到這一步。大家並未證明原圖的Minimum Weight (T⊕N)-Join和新圖的Minimum Weight (T⊕N)-Join如何對應。
我認為兩者根本無法對應。一般來說,圖上某些邊,權重增減、甚至變號,Minimum Weight T-Join都會大幅改變。
我認為上述演算法是古人瞎掰的。負權重圖的多項式時間演算法,也許根本不存在。
備忘
一、正權重圖,最短路徑截取一段路徑,仍是最短路徑。Minimum Weight T-Join拿掉一些邊(T隨之變成T'),仍是Minimum Weight T'-Join。
二、Minimum Weight T-Join內部取一些正邊轉負邊【這部分是錯的】、外部取一些負邊轉正邊。原圖也轉換這些邊,成為新圖。它仍是新圖的Minimum Weight T-Join。
應用
無向圖的最短邊互斥路徑:以起點與終點作為T。(恰是最短點互斥路徑) 無向圖的中國郵差問題:以所有奇點作為T。
b-Matching
b-Matching
b-factor = perfect b-matching 每個點剛好連著b條邊的子圖 perfect (b,u)-matching = u-capacitated perfect b-matching 每個點剛好連著b條邊,每條邊可重複使用,最多使用u次。 (b,u)-matching = u-capacitated b-matching 每個點最多連著b條邊,每條邊可重複使用,最多使用u次。 b-matching 每個點最多連著b條邊 1-matching = matching 一般圖匹配 這些問題可以從第一個reduce到最後一個, 就算是weighted的版本也是P問題,不過演算法很難很難的。 再來,就算每個節點各自設定不同的b值,也是P問題。
演算法
因為P的演算法太難了,所以這裡提供假P的演算法。 針對每一個節點,自己拷貝變成b份,此節點的鄰點也都拷貝一份。 若原本有節點i與鄰點j有邊,則拷貝的i與拷貝的j之間也有邊,形成Kb(i),degree(i)。 然後拷貝出的鄰點,有相對應的就連一條邊。 然後求最大匹配即可。
Stable Matching
但願人長久,千里共嬋娟。《蘇軾.水調歌頭》
穩定婚姻問題(Stable Marriage Problem)
一家婚友社將N位男士與N位女士進行媒合,一位男士配一位女士,共要撮合N對婚姻。
每位男士各自擁有一個好感度列表,對N位女性各以1到N的數字進行排名。每位女士各自亦有一個好感度列表,對N位男性各以1到N的數字進行排名。
媒合時必須避免,不是伴侶的某男某女,出現婚外情的傾向:「男對女說:我愛你比愛我妻子還深。同時女對男說:我愛你比愛我丈夫還深。」請找出適合的配對方式。
演算法(Gale–Shapley Algorithm)
這個問題已被證明恰有兩解(或一解,當此兩解相同),其中一解稱為男士最佳解,另一解則稱為女士最佳解。男士最佳解的演算法如下:
1. N位男士各自向自己最喜愛的女士求婚。 2. N位女士各自從自己的求婚者中,挑最喜愛的那位男士訂婚,但是往後可背約。 沒有求婚者的女士,就只好等等。 3. 失敗的男士們,只好各自向自己次喜愛的女士求婚。 4. N位女士各自從自己的求婚者中,挑最喜歡的那位男士訂婚,但是往後可背約。 已訂婚卻有更喜愛的男士求婚的女士,就毀約,改為與此男士訂婚。 沒有求婚者的女士,就只好再等等。 5. 重複3. 4.直到形成N對伴侶為止。
男士不斷降格以求,女士不斷水漲船高,最後達成平衡。
女士最佳解的演算法則改為由女士主動求婚即可。
時間複雜度O(N²)。
UVa 11119 1175 ICPC 3837
Popular Matching