問題描述
給定一個圖,求出一個不重複遍歷所有點的環路,使環路的邊權之和最小
TSP(旅行商問題)是一個著名的NP-Hard問題,無法在任意情況下使用多項式時間算法精確求解
根據給定圖的性質,我們可以對問題做一些細分類
-
圖是有向圖還是無向圖
-
圖是否爲完全圖(實際上,非完全圖可以通過將不存在邊的邊權視爲INF,轉化爲完全圖)
-
圖的邊權是否滿足度量性質(metric)
或稱是否滿足三角不等式,\(\forall x, d(u,v)\le d(u,x)+d(x,v)\)
TSP在實際應用背景下,許多情況都滿足此性質
比如點在幾何空間中,所有邊權爲兩點距離
又比如點在地圖上,所有邊權爲兩點之間最短路(儘管路徑上可能有別的點)- 研究指出,對於metric情況,存在常數級多項式時間近似算法(即該算法所求結果與最優解比值小於某個常數)
比如求出圖的最小生成樹,將其的一個dfs序作爲環,可以證明得到近似比小於\(2\)的解
比如Christofides算法的近似比爲\(\frac32\) - 研究也指出,對於non-metric情況,不存在普遍的常數級多項式時間近似算法
- 研究指出,對於metric情況,存在常數級多項式時間近似算法(即該算法所求結果與最優解比值小於某個常數)
算法概述
通過求解圖的最小環覆蓋,再將所有環以一定的方式合併成一個環,即得到一個解
最小環覆蓋(vertex cycle cover)
在給定圖中,選出任意個環路,使它們互不相交且正好覆蓋所有點,最小化邊權總和
顯然對於同一個圖,最小環覆蓋的答案一定不大於TSP問題的答案,因爲TSP所求的一個環路也是合法的環覆蓋
那麼最終的近似程度就很大程度取決於合併所有環帶來的代價
至於如何求解,我們對有向圖和無向圖分別討論
有向圖
每個點都恰好有一條出邊和一條入邊,這是構成不相交環的充要條件
於是問題轉化爲二分圖最小權完美匹配問題
二分圖兩邊各\(n\)個點,對於原圖中的每條邊\((u,v,w)\),在二分圖中把左邊的\(u\)和右邊的\(v\)連起來
使用KM算法,複雜度\(O(n^3)\)
無向圖
不好套用有向圖的做法,因爲允許了\(u\to v\to u\)這樣的二元環存在
主要後果並不是違反了無向圖環的定義,而是大大提高了合併環的代價
試想一個圖中的那些權值特別小的邊,很傾向於形成二元環,那麼最終最小環覆蓋環的個數就會爆炸
怎麼辦呢?來點概念
-
d-regular, spanning subgraphs (d-factors)
正則生成子圖,指的是某圖的一個包含原圖所有點的子圖,滿足每個點的度數均爲\(d\)
比如完美匹配等價於1-factor,環覆蓋等價於2-factor -
Tutte's Reduction
由Tutte提出,將d-factor求解轉化爲圖匹配求解
對於原圖每個點\(u\),新建點\(u_1,...,u_d\)
對於原圖每條邊\(e:(u,v,w)\),新建點\(e_u,e_v\),新建邊\((e_u,e_v,w)\)
並且\(\forall i\in[1,d]\),新建邊\((u_i,e_u,0),(v_i,e_v,0)\)
求出該圖的最大權完美匹配
對於新圖的\((e_u,e_v,w)\)型邊,它在匹配邊中當且僅當對應原圖邊\(e\)未被選入最小環覆蓋
對於新圖的\((u_i,e_u,0)\)型邊,它在匹配邊中當且僅當對應原圖邊\(e\)被選入最小環覆蓋
爲什麼這樣是對的呢?顯然新圖存在完美匹配,那麼既然新圖的\(u_i,e_u\)已經匹配,\(e_v\)就肯定會和\(v_j\)匹配,不會自相矛盾
那麼最大化匹配邊的權值和,就是最小化d-factor的權值和
例如對於三個點的最小環覆蓋,建新圖
顯然完美匹配中\((e_u,e_v,w)\)型邊一個都不能選,原圖也只有唯一環覆蓋
可是這是個一般圖呀,最大權完美匹配怎麼做?
OI中相對普及的是二分圖最大權完美匹配的KM算法、一般圖最大匹配的帶花樹算法
一般圖最大權完美匹配算法(Maximum Weight Perfect Matching)由Edmonds提出,實際上就是上述兩種思想的結合
但其理解和實現的難度就不是兩個算法的簡單相加了TAT
需要學習的大佬可以參考洛谷P6699 【模板】一般圖最大權匹配,UOJ#81. 一般圖最大權匹配
注意最大權匹配和最大權完美匹配是不一樣的
目前普遍的\(O(n^3)\)實現方法,代碼量基本都是7k左右
廣爲流傳的Min_25大佬的\(O(nm\log n)\)實現,代碼量已經到了20多k!!!
對於最小環覆蓋,兩種實現的複雜度分別爲\(O(m^3),O(m^2\log n)\)(\(n,m\)爲原圖點數,邊數)
環的合併
每次挑兩個環出來,枚舉斷開的位置和接的方向,合成一個環
至於挑環的順序,又可以搞好多方法出來
大環優先法
蒟蒻的想法,每次把次大的環往最大的環上合
這樣做是爲了讓最小的環能在其合併時枚舉到儘可能多連接的方式(小環長度×大環長度×2)
假如兩個小環合併,連接方式很少,最優方式的代價期望就會提大大高
類MST kruscal法
也是蒟蒻的想法,每次選擇所有環對中的一個最優方式進行合併
我們把環看成一個超級點,把合併看成兩個超級點連邊,就類比到了MST上
這是靠幾何直覺大致表明這種方法在metric情況下makes sense
而且這樣做也大概率比大環優先法優秀,這個貪心只是忽略了先合併的環有兩條邊被刪掉的輕微後效性
逐次縮環法
論文算法(Cycle Shrinking Algorithm),但是需要允許構造經過某些點多次的路徑,適合貼近現實的metric情況
每次求出最小環覆蓋後,若環數爲1,停止
否則從每個環中選擇一個代表點,構造新圖,新圖中兩點之間邊權爲原圖中兩點最短路
再求新圖的最小環覆蓋,如此循環
因爲每次建新圖,點數比原來至少少一半,所以最多執行\(O(\log n)\)次最小環覆蓋
又因爲每次最小環覆蓋長度不超過TSP的答案,所以該算法被證明有\(O(\log n)\)的近似比
部分情況下該算法的近似程度分析以及改進探討
有向完全圖,所有邊權隨機
這裏每一條邊都是i.i.d.的連續型隨機變量
運行算法,我們得到一個匹配,可以視爲一個全錯位的置換\(\pi\),左邊點\(u\)匹配到右邊點\(\pi(u)\)
我們關心環的個數的期望,也就是\(\pi\)中循環的個數的期望
有一個結論:得到所有合法置換的概率是相等的,因爲所有邊是i.i.d.的,得到任意兩個置換的概率都可以通過點、邊的映射相互轉化,用對稱性證明它們相等
因此我們直接求等概率隨機一個長度爲\(n\)全錯位排列的循環個數期望\(L_n\)
- A008306:\(T(n,k)\)爲\(n\)元素劃分成\(k\)個長度至少爲\(2\)的圓排列的方案數,又稱連帶第一類Stirling數
- A000166:\(D_n\)爲全錯位排列數
- A162973:\(\sum_{k=1}^{n/2}kT(n,k)\)
它是\(\log n\)級別的!也就是說,合併環所帶來的長度增加是非常有限的,近似解和最優解的絕對誤差大概率在一個合理的範圍內
無向完全圖,所有邊權隨機
A038205:\(n\)元素劃分成個長度至少爲\(3\)的圓排列的方案數
然並卵,不能像有向圖中那樣用對稱性了,只能說明同構的環覆蓋概率相等,於是蒟蒻不會算期望了/kk
不過既然環長至少爲\(3\)了,那麼環數期望肯定不超過有向圖的情況\(O(\log n)\)
通過重複隨機採樣,能說明
- 得到更大環長、更少環數的環覆蓋的概率更高
- 環數期望似乎與概率分佈也有關?
算法變種
我們另一個關心的是\(O(m^2\log n)\)的複雜度,在跑上百個點的完全圖的時候就開始喫力了
不過既然不是確定出正解的算法了,想怎麼亂來都行,能降一點複雜度,快點跑出來就好
通過觀察,我們發現,實際上在點很多、圖很密集的情況下,那些邊權稍微大一點的邊都基本上用不上了
假如我們知道最大的能被用上的邊的邊權\(W\),我們只留下邊權不超過\(W\)的邊(條數爲\(c\))建新圖跑MWPM,新圖的點數和邊數就會減少到\(O(n+c)\)
比如,\(n=100,d(u,v)\sim\operatorname{Unif(0,1)}\)時,把大於\(0.1\)的邊都刪掉,能變快將近一百倍
-
蒟蒻找到了論文中的一個定理,給了這個胡搞一定的理論依據
假設常數\(K>16,p\ge\frac{K\log n}{n}\),那麼在\(n\)個點的完全圖中讓每條邊以概率\(p\)出現,\(1-p\)不出現,
這個圖存在Hamilton迴路是高概率事件(\(n\to\infty,P(·)\to1\))那也就是說,我們需要在原圖留下\(\Omega(n\log n)\)的邊來保障我們高概率找到一個環覆蓋
基於這個依據還需要一個猜測,那就是加入邊權更大的邊對最小環覆蓋的改善很微小
假設這些都是對的,那令\(c=O(n\log n)\),我們用\(O((n+c)^2\log n)=O(n^2\log^3 n)\)的時間能高概率找到一個很小的環覆蓋
關鍵是不知道\(W\)是多少
一種方法是自己生成幾組數據多試試,再把\(W\)定下來
另一種方法是交給算法把它試出來,採用倍增試探法
- 令\(c=n\)
- 留下前\(c\)小的邊,建新圖跑一般圖完美匹配(甚至能上隨機算法,跑得快並且大概率對就行)
- 如果成功找到完美匹配,令\(W=\)第\(c\)小邊的邊權,結束;否則\(c=2c\),轉步驟2.
無向圖,metric,二維平面點
這裏僅與Christofides算法作對比
通過重複隨機採樣(在矩形區域中隨機選擇整數點),該算法有80%的概率優於Christofides算法
以下的兩個例子,能夠很好的說明問題
例子一
Christofides更優秀,該算法形成的解被已形成的幾個小環大大限制住了,陷入了局部最優
目測來看,可以基於對解進行點交換、部分環交換等局部調整的方法,應用貪心或者模擬退火的算法,將當前情況大大改善
另一方面,找到更可靠的環合併算法也是非常有希望的研究方向
例子二
該算法更優秀,Christofides的解出現了許多交叉的地方
這是因爲最小環覆蓋在二維平面下的性質:不存在兩個環相交
比如這種情況,顯然把兩個交叉的地方打開,重新分配環\((a_1,b_2,b_3,a_4),(b_1,a_2,a_3,b_4)\)一定更優
然而合併環後仍有極小概率出現交叉,問題還是陷入局部最優,比如下面,左邊是該算法,右邊是真正最優解
解決最終解交叉的方法,就是直接枚舉檢查每兩條邊是否相交,相交了就打開,一定有一種調整方式使得調整後仍然是Hamilton迴路
這樣一來Christofides的解也能大大改善,也就不能說該算法大概率比Christofides好了
總結
該算法非常適合non-metric,邊權獨立隨機,圖點數中等的情況
該算法在metric情況下適用性不高,因爲解的近似性不如Christofides穩定,時間複雜度高(Christofides爲\(O(n^3)\))
這也是在意料之中的,因爲metric情況下,形成局部小環的概率提高,環數期望增加,也沒有完全利用三角不等式的性質