《淺談信息學競賽中的獨立集問題》 - 學習筆記

看起來很有趣。來提升一下亂搞技巧。

3 一般圖的獨立集問題

3.1 基於極大獨立集搜索的獨立集算法

顯然最大獨立集一定是極大獨立集,所以考慮把極大獨立集搜出來,也許能帶來優化。

3.1.2 極大獨立集與 Bron-Kerbosch 算法

其實是一個很簡單的算法。考慮任意一個點 \(u\) ,那麼 \(u\cup N(u)\) 裏面顯然至少會有一個點在極大獨立集內。

現在維護集合 \(R,P,X\) ,分別表示已經確定的當前集合、還可以加入的點的集合、欽定不能加入的點的集合。找到 \(u\in P\cup X\) 。使得 \(|u\cup N(u)|\) 最小,然後枚舉 \(v\in P\cap (u\cup N(u))\)

  1. 遞歸搜索 \(R\cup v,P-(v\cup N(v)),X-(v\cup N(v))\)
  2. \(v\)\(P\) 中刪去,加入 \(X\)

顯然所有極大獨立集都會被搜到。

3.1.3 極大獨立集的個數

上面這個算法可以被證明遞歸調用次數是 \(O(3^{n/3})\) 的。

然後可以算算隨機圖的期望極大獨立集個數,有

3.2 基於動態規劃的獨立集算法

DP 當然更高級一點,還可以求解獨立集計數等問題。

但這個 DP 其實近於爆搜:直接設 \(dp_S\) 表示 \(G[S]\) 上的最大獨立集,然後隨便拿出一個點 \(v\) ,就有

\[dp_S=\max\{dp_{S-v},dp_{S-v-N(v)}+1\} \]

如果每次拿出編號最大的點,那麼可以做到不重不漏,並且複雜度 \(O(2^{n/2})\) ,因爲前 \(n/2\) 層每層只有 2 種遞歸的可能,後 \(2^{n/2}\)\(S\) 只包含後面 \(n/2\) 個點。卡滿也非常簡單,放 \(n/2\) 個獨立的兩個點的連通塊即可。或者如果沒加剪枝的話 \(m=0\) 的圖就可以卡滿了。

然後是兩個簡單的剪枝:

  1. \(v\)\(G[S]\) 中度數最大的點。顯然這樣還是不重不漏。
  2. \(S\) 不連通時拆開分別計數。

這樣就跑得飛快。

還有一個優化是在 \(G[S]\) 是一棵樹時改成樹形 DP ,但好像沒啥用。

一個小問題是這個算法的空間複雜度比較爆炸,可以只記憶化 \(S\) 較小的 \(dp\) 值。

3.2.4 測試與對比

4 特殊圖的獨立集問題

二分圖大家都會,分層圖也沒什麼好說的。

4.4 "\(k\)-仙人圖" 上的動態規劃

仙人掌的 dfs 樹滿足每條樹邊最多被非樹邊覆蓋一次,所以也可以隨便 DP 。更進一步,如果滿足每條邊最多屬於 \(k\) 個簡單環,其中 \(k\) 爲常數,那麼都可以在樹上狀壓 DP 解決。

4.1.2 無爪圖的最大獨立集

在無爪圖 (claw-free graph) 上也有多項式做法。無爪圖就是不存在 \(K_{1,3}\) 導出子圖的圖。

集訓隊論文把這一段寫得很簡略,於是我跑去看了參考資料

我就是論文翻譯機

有一個類比:考慮一個任意圖的線圖,它都一定是一個無爪圖。線圖上的獨立集就會對應回原圖的一個匹配,而一般圖匹配算法是有多項式做法的。

然而並不是任意一個無爪圖都能對應回一個原圖,所以還要操作。

無爪圖有一個重要性質:兩個獨立集的對稱差的導出子圖滿足每個點的度數都小於等於 2 ,不難證明。也就是說對稱差的導出子圖的每個連通塊要麼是環,要麼是鏈。

\(I_1,I_2\) 爲兩個獨立集,且 \(|I_1|<|I_2|\) ,那麼 \(I_1\Delta I_2\) 一定有一條鏈,滿足首尾都不屬於 \(I_1\) 。翻轉這條鏈的狀態即可使得 \(|I_1|\) 增大。

所以從 \(I=\varnothing\) 開始,設黑點爲在 \(I\) 中的點,白點爲不在 \(I\) 中的點。每次的目標就是找到一條黑白交錯的鏈,滿足鏈上的點兩兩不同,任意兩個白點不相鄰,首尾都爲白色,且首尾都只和一個黑點相鄰。鏈長度 \(\le 3\) 可以先特判掉。

無爪圖的一個性質:以下兩個圖不可能作爲子圖(不一定是導出子圖)存在。

於是“任意兩個白點不相鄰”可以寫得更簡潔一點,只需要滿足首尾不相鄰且隔着一個黑點的白點不相鄰即可。畫畫圖即可證明。

現在可以枚舉起終點,刪除所有和它們相鄰的白點,刪除所有隻和一個黑點相鄰的白點,然後嘗試找一條增廣路。現在的圖還滿足性質:兩個白點之間有邊,僅當它們與一個公共黑點相鄰(證明見上圖右邊)。把現在這個圖叫做一個 Reduced Basic Structure (RBS) 。

4. A Useful Theorem

然後證明一個(暫時看不懂有什麼用的)定理。設 \(S\) 是一個非空集合, \(R\) 是一個 symmetric relation on S 。記 \(xRy\) 表示 x is related to y ,否則 \(xR'y\) 。設 T-property 對於三元組 \((x,y,z)\) 滿足,當且僅當 \(xRy,yRz,zRx\) 恰好有奇數個成立。可以發現如果 T-property 對於所有三元組成立,那麼 \(R\) 是在 \(S\) 上的一個等價關係,並且把 \(S\) 劃分爲至多兩個等價類。

現在設 \(\{S_\alpha:\alpha\in A,\text {an index-set}\}\) 爲一個對 \(S\) 的固定的劃分,且劃分出來至少三個非空子集。把劃分出來的子集叫做 wings 。對於一個 symmetric relation \(R\) ,定義 \(x\bar{R}y\) 當且僅當 \(xRy\)\(x,y\) 屬於不同的 wing 。也就是說 \(\bar R\) 只保留 \(R\) 關於不同 wing 的元素的信息。如果 \(R\) 對於兩兩不在同一個 wing 的三元組 \((x,y,z)\) 滿足 T-property ,那麼就稱 \(R\) 滿足 PT-property ,且顯然 \(\bar R\) 也滿足。

可以證明,如果 \(L\) 滿足 PT-property ,那麼存在唯一的一個 \(R\) ,使得 \(\bar R=\bar L\) ,且 \(R\) 對於所有 \((x,y,z)\) 都滿足 T-property 。

上面有點不說人話。就是對於一個完全 \(k\)-分圖 (\(k\ge 3\)) ,任取一種給邊紅綠染色的方案,使得任意一個三角形都有奇數個紅邊,那麼就有唯一一種給點黑白染色(不考慮 swap(black,white) )的方案,使得紅邊連接同色點,綠邊連接不同色點。

證明這個東西有什麼用呢?注意到圖中

上面兩個不可能作爲導出子圖出現,而下面兩個可能出現。

5. Classification Of Black Vertices

現在考慮一個 RBS ,我們來把黑點分類。

任取一個黑點,考慮和它相鄰的白點,把這些白點按照相鄰的另一個黑點分成幾個 wings ,每個 wing 中的另一個黑點叫做 the tip of the wing 。如果這些白點中有一個是隻和它相鄰的(即增廣路的起點或終點),那麼把這個黑點叫做“一類規則點”;否則如果它有至少 3 個 wings ,那麼叫做“二類規則點”;否則如果有恰好兩個 wings ,那麼叫做“不規則點”;否則叫做垃圾“無用點“。

顯然無用點和與它相鄰的白點可以全部刪掉。

(省略了白點之間的連邊)

(注意這個結構與 Figure 3,4 之間的關係)

(整個圖就是由若干個這樣的結構拼成的,已經看到解題的希望了)

注意到一個增廣路就是經過了若干個 wings ,每個 wing 踩一個白點,所以同一個 wing 的白點之間的邊已經不重要了。

現在對於每個“規則點”,用如下方法把相鄰的白點分成兩個子集。

對於一類規則點,把起點/終點單獨放一個類型,其他點全部放到另一個類型;對於二類規則點,按照 wing 把點集拆開,然後設 \(\bar L\) 表示兩個不同 wing 的點之間是否有邊,然後就可以用上面那個定理唯一地把點集拆成兩個等價類。

這個定理的作用已經浮現出來了:同一個 wing 內部的邊對最終結果沒有影響,所以不需要考慮,任意分配。分成兩個等價類之後,就只能從一邊走到另一邊了。

7. Construction Of The Edmonds'-Graph

已經不是很想繼續看了。

大概是把黑點換回黑邊,分成的兩個白點等價類分別變成連向黑邊的兩個端點的一堆白邊,然後就得到原圖了。這個原圖的線圖雖然不是當前的圖,但應該性質是類似的。

(顯然這句話很不嚴謹)

所以就可以用類似帶花樹的算法求出增廣路。

(學完之後感覺沒什麼用啊,我又寫不出來 /kk )

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