系統地學習一下。但 是 為 什 么 我 要 啃 證 明 過 程 啊
前幾節
前面幾節直接跳了,只寫一些容易忘或是曾經不是很理解的東西。
環:極小非獨立集。注意環刪掉一個元素之后是獨立集但不一定是基,所以環的大小可以不同(廢話,看圖擬陣不就看出來了)。
匹配擬陣:不是定了幾條邊必須要選,而是定了幾個點必須要被匹配。
基交換定理:兩個基 \(A,B\) ,從 \(A\) 刪掉 \(A\backslash B\) 的一個元素之后必然可以補一個 \(B\) 里的元素。雖然是廢話但好像比較有用。
推論 2.4 :如果存在環 \(X\ne Y\) 且 \(e\in X\cap Y\) ,那么 \(X\cup Y-\{e\}\) 不是獨立集。顯然 \(X,Y\) 不存在子集關系,所以包含 \(X\cap Y\) 的最大獨立集至少刪了兩個點。現在 \(X\cup Y-\{e\}\) 能把它補成只刪一個點,這顯然不可能。
推論 2.5 :一個基加上一個元素得到的集合中包含唯一一個環。如果有兩個不同的環 \(C_1,C_2\) ,那么顯然有 \(e\in C_1\cap C_2\) ,所以 \(C_1\cup C_2-\{e\}\) 不是獨立集,矛盾。
秩函數的次模性: \(\forall A,B\subseteq S,r(A\cup B)+r(A\cap B)\le r(A)+r(B)\) 。這是因為從 \(A\cap B\) 里的最大獨立集可以擴展出 \(A\cup B\) 的最大獨立集,然后分配一下就得到了 \(A,B\) 里分別一個獨立集,但不一定是最大的。
由秩函數定義擬陣:遺傳性很顯然。交換性可以考慮 \(|A|<|B|\) 且 \(A\cup \{b_i\}\) 都不是獨立集,那么可以歸納法,假設 \(r(A\cup \{b_1,\cdots,b_n\})=r(A\cup \{b_{n+1}\})=|A|\) ,那么直接使用次模性得到 \(r(A\cup \{b_1,\cdots,b_{n+1}\})=r(A)=|A|\) ,最終可以推到 \(r(A\cup B)=r(A)<r(B)\) 得到矛盾。
擬陣上的最優化直接跳了。
4 一些補充定義
4.1 對偶擬陣
對偶擬陣的獨立集的意義是,從 \(S\) 中刪掉 \(I\) 后,還需要存在一個基。
而它的秩函數的意義是:可以保留 \(I\) 中的多少個元素,得到 \(I'\) ,使得從 \(S\) 中刪掉 \(I'\) 后仍然存在獨立集。而不是 \(S\) 刪掉 \(I\) 之后的最大獨立集大小。當然,可以看出這兩者是有直接關系的,比如觀察下面的秩函數。
然后求一手新的秩函數:
(把 \(S\) 作為全集, \(U\) 作為某個集合的寫法,真的讓人非常難受)
可以證明新的秩函數滿足三個性質,所以這是擬陣。
當然直接證明交換性也是可以的:設 \(A=E+F,B=E+G,F\cap G=\varnothing,|G|>|F|,H=S-E-F-G\) 。如果 \(A\) 加上 \(B\) 任何一個元素都不合法,說明所有與 \(A\) 無交的基都完全包含 \(G\) ,隨便拎一個出來,設為 \(I\) 。但是 \(B\) 是合法的,所以至少有一個基 \(J\) 與 \(G\) 無交。容易發現 \(|J\cap H|>|I\cap H|\) 。設 \(K=I\cap H\) ,那么 \(K\) 還可以再多在 \(H\) 里面挑一個元素(交換性)得到 \(K'\) ,然后再用 \(I\) 擴展 \(K'\) ,一定可以得到一個不完全包含 \(G\) 的基。
(麻煩的很)
對偶擬陣的基就是原擬陣的基取補集得到的,所以可以注意到一個擬陣對偶兩次之后會回到自己。
4.2 刪除和收縮
刪除很容易理解,就是把 \(Z\) 刪掉了,並且秩函數也不變。
考慮如何理解收縮操作。
先考慮 \(M^*\backslash Z\) 中的獨立集是什么:一個不包含 \(Z\) 的集合,使得取補集之后還存在一個基。
那么 \(M^*\backslash Z\) 里的基,就是極大的一個集合,使得取補集之后能和 \(Z\) 里面的某一個極大獨立集拼在一起。
那么 \((M^*\backslash Z)^*\) 的獨立集,就是需要能和 \(Z\) 中的一個極大獨立集拼在一起得到一個 \(M\) 中的獨立集。
交換性還是很顯然的。
(好扯)
這時候秩函數的強大就又一次體現出來了。我們可以什么都不管,直接推新的秩函數:
頓時就看出什么意思了。
事實上收縮這個名稱可以對應到圖擬陣中的縮邊操作。
對一個擬陣進行刪除或收縮操作之后還是一個擬陣。
4.3 極小元
對一個擬陣 \(M\) 刪除和收縮若干次之后得到的任意擬陣 \(M'\) ,稱為 \(M\) 的極小元。
5 擬陣的交
正 片 開 始
擬陣交問題就是要找到最大的 \(|I|\) 。
定理 5.1 (最小最大定理):
先證明 \(\max \le \min\) ,即 \(|I|\le r_1(U)+r_2(S\backslash U)\) 。這直接把 \(I\) 拆開即可。
所以現在需要求出一組 \(I\) 和 \(U\) 滿足這個等式,就證明了該定理且解決了擬陣交。下面會給出一個算法,但還要一些鋪墊工作。
5.1 強基交換定理
正 片 結 束
也就是加上哪些元素沒有作用。
引理 5.2 :如果 \(A\subseteq B\) ,那么 \(cl(A)\subseteq cl(B)\) 。
顯然 \(e\in A\) 時一定正確,否則直接用次模性 \(r(A \cup\{e\})+r(B) \geq r((A \cup\{e\}) \cap B)+r(B \cup\{e\}) = r(A)+r(B \cup\{e\})\) ,然后兩邊消去 \(r(A)\) 即可證明。
引理 5.3 :如果 \(e\in cl(A)\) ,那么 \(cl(A)=cl(A\cup \{e\})\) 。
已經證明了 \(cl(A)\subseteq cl(A\cup \{e\})\) ,所以對於 \(f\in cl(A\cup \{e\})\) ,只需要證明 \(f\in cl(A)\) 即可。由於 \(r(A\cup \{e\})=r(A)\) ,所以這其實是廢話。
引理 5.4 : \(cl(A)=cl(cl(A))\) 。
用引理 5.3 逐步加入元素即可。
由於 \(B\) 是基,所以 \(B+\{x\}\) 包含唯一的環 \(C\) ,且 \(x\in C\) 。於是 \(x\in cl(C-\{x\})\) 。運用引理 5.2 得 \(cl(C-\{x\})\subseteq cl((A\cup C)-\{x\})\) 。運用引理 5.3 得 \(cl((A\cup C)-\{x\})=cl(A\cup C)\) 。由於 \(A\) 是基,有 \(S=cl(A)\subseteq cl(A\cup C)=cl((A\cup C)-\{x\})\) ,所以 \((A\cup C)-\{x\}\) 包含一個基,設為 \(A'\) 。由於 \(|A'|>|A-\{x\}|\) ,所以存在 \(y\in A'\backslash (A-\{x\})\) 使得 \(A-\{x\}+\{y\}\) 是基,並且顯然 \(A'\backslash (A-\{x\})\subseteq C-\{x\}\subseteq B\) ,所以 \(y\) 合法。另外由於 \(C\) 是環,所以 \(C-\{y\}\) (注意 \(x\in C-\{y\}\) )是獨立集,然后用 \(B\) 把它補成 \(B-\{y\}+\{x\}\) 即可。
(非常詭異的證明過程)
5.2 算法
正 片 開 始
引理 5.6 :令 \(I,J\) 為兩個獨立集,且 \(|I|=|J|\) 。那么 \(D_M(I)\) 中存在一個關於 \(I\backslash J\) 和 \(J\backslash I\) 的完美匹配。
為了能使用強基交換定理,強行定義一個新擬陣 \(M'\) ,獨立集為 \(\{I':I'\in \mathcal{I},|I'|\le |I|\}\) ,那么 \(I,J\) 就都變成基了。現在任取 \(J\backslash I\) 的一個元素 \(x\) ,可以找到 \(I\backslash J\) 的一個元素 \(y\) ,使得可以交換。那么一定存在邊 \((y, x)\) ,並且可以把 \(J\) 變成 \(J-\{x\}+\{y\}\) 並遞歸。
定理 5.7 :令 \(I\) 是擬陣 \(M\) 的獨立集, \(J\) 是一個大小與 \(I\) 相同的集合。如果二分圖 \(D_M(I)\) 中存在一個唯一的關於 \(I\backslash J\) 和 \(J\backslash I\) 的完美匹配,那么 \(J\) 也是獨立集。
顯然可以先把不屬於 \(I\backslash J\) 和 \(J\backslash I\) 的點刪掉。設前者為左部點,有 \(y_1\cdots y_t\),后者為右部點,有 \(x_1\cdots x_t\) 。
令 \(N\) 是唯一的匹配,不妨設為 \(\{(y_1,x_1),(y_2,x_2),\cdots ,(y_t,x_t)\}\) 。令 \(N\) 中的邊從右到左,其它邊從左到右。
由於匹配唯一,所以現在圖中一定無環。給 \((y_i,x_i)\) 重新分配下標,使得 \(x_1\cdots x_t\) 的拓撲序單調上升。現在可以看出 \(i<j\) 時不存在 \(y_i\to x_j\) 的邊。
然后開始使用反證法,設 \(J\) 中含有環 \(C\) ,取最小的 \(i\) 滿足 \(x_i\in C\) 。那么對於所有 \(x\in C-\{x_i\}\) ,都不存在 \(y_i\to x\) 的邊,即 \(C-\{x_i\}\subseteq cl(I-y_i)\) 。所以 \(cl(C-\{x_i\})\subseteq cl(cl(I-y_i))=cl(I-y_i)\) 。因為 \(C\) 是環,所以 \(x_i\in cl(C-\{x_i\})\) ,所以 \(x_i\in cl(I-y_i)\) ,但這與邊 \((y_i,x_i)\) 矛盾,所以 \(J\) 必定是獨立集。
(這又是什么神仙證明思路啊?)
然后終於可以開始敘述算法過程了。
令初始的 \(I\) 為 \(\varnothing\) 。定義集合 \(X_1=\{x\notin I:I+\{x\}\in \mathcal{I_1}\},X_2=\{x\notin I:I+\{x\}\in \mathcal{I_2}\}\) 。每次在當前的交換圖中找到一條 \(X_1\) 到 \(X_2\) 的最短路徑,令其為 \(P\) ,然后令 \(I\gets I\Delta P\) 。稱這樣一次過程為一次增廣過程。重復增廣過程,知道找不到路徑。此時的 \(I\) 就是最大的,且找到了 \(U=\{z\in S:z \text{ 可以到達 }X_2\}\) 。
注意如果 \(X_1\cap X_2\ne \varnothing\) 那么會直接拓展一個屬於交集的元素。
然后為了證明正確性,需要 1. \(|I|\ge r_1(U)+r_2(S\backslash U)\) 2. 算法運行中的任意一個時刻 \(I\Delta P\) 都是公共獨立集。
先證明 \(r_1(U)\le |I\cap U|\) 。反證法,如果 \(r_1(U)>|I\cap U|\) ,那么存在 \(x\in U\backslash I\) ,使得 \((I\cap U)+\{x\}\in \mathcal{I}_1\) 。如果 \(I+\{x\}\in \mathcal I_1\) ,那么又有 \(x\in X_1\) ,所以存在一條路徑,矛盾;否則 \(I\) 要先刪掉若干個元素之后才能加 \(x\) ,由交換性可知只需要刪一個,所以存在 \(y\in I\backslash U\) ,使得 \(I-\{y\}+\{x\}\in \mathcal I_1\) ,但這又說明存在 \(y\to x\) 的邊,即 \(y\) 能到達 \(X_2\) ,所以 \(y\) 也應該在 \(U\) 中,矛盾。
然后設 \(V=S\backslash U\) ,證明 \(r_2(V)\le |I\cap V|\) 。同樣反證法,如果 \(r_2(V)>|I\cap V|\) ,那么存在 \(x\in V\backslash I\) ,使得 \((I\cap V)+\{x\}\in \mathcal I_2\) 。如果 \(I+\{x\}\in \mathcal I_2\) 那么 \(x\in X_2\) ,所以 \(x\in U\) ,矛盾;否則存在 \(y\in I\backslash V\) 使得 \(I-\{y\}+\{x\}\in \mathcal{I}_2\) ,那么有邊 \(x\to y\) ,但 \(y\in U\) ,所以 \(x\) 可以到達 \(X_2\) ,矛盾。(這一段自己補的,可能有鍋)
最后證明每一步的 \(I\Delta P\) 都是獨立集。
令最短路 \(P=(x_0,y_1,x_1,\cdots,y_t,x_t)\) ,令 \(J=\{x_1,\cdots,x_t\}\cup (I\backslash \{y_1,\cdots,y_t\})\) ,那么 \(J=I\) ,且在 \(D_{M_1}(I)\) 中 \(I\backslash J\) 和 \(J\backslash I\) 存在唯一的完美匹配(不然就不是最短路了),所以 \(J\) 是 \(M_1\) 中的獨立集。然后考慮加入 \(x_0\) 。既然 \(P\) 是最短路,有 \(x_1,\cdots,x_t\notin X_1\) ,所以 \(r_1(I\cup J)=r_1(I)=r_1(J)\) 。由於 \(I+\{x_0\}\) 是獨立集, \(|I+\{x_0\}|>|J|\) ,所以可以給 \(J\) 補一個元素。如果這個元素不是 \(x_0\) 就得到 \(r_1(I\cup J)>r_1(I)\) ,矛盾,所以只能是 \(x_0\) 。
5.3 復雜度
令 \(r=\max(r_1(S),r_2(S))\) ,每次構建出來的圖是 \(n\) 個點, \(rn\) 條邊(???),要跑 \(r\) 次增廣,所以復雜度 \(O(r^2n)\) 。
5.4 帶權擬陣的交
(你說是那就是吧)
5.5 多個擬陣的交
NP-Hard
5.6 應用
二分圖匹配
匹配本身就是一個擬陣,但判斷一個點集是否是獨立集也不好直接判斷。
考慮直接定義以邊為元素的兩個擬陣,分別要求左邊度數 \(\le 1\) 和右邊度數 \(\le 1\) ,那么二分圖匹配就可以看做擬陣交。
仔細分析一下發現匈牙利算法找到的增廣路和擬陣交中的增廣路一樣。
(但是我感覺好像不太一樣?匈牙利算法沒有保證增廣路最短吧)
最小樹形圖
兩個擬陣,一是無環,二是除了 \(x\) 以外每個點入度不超過 1 。然后帶權擬陣交。
Colourful tree
帶權無向圖,每條邊有一個 1 到 \(n-1\) 的顏色,求一個權最大的生成樹,滿足每種顏色只出現一次。
顯然可以擬陣交。
Rainbow Graph
選取一些邊使得圖連通並不是擬陣,但圖擬陣的對偶擬陣是刪掉一些邊使得圖連通,所以考慮刪邊。兩個限制就是擬陣交。由於擬陣交算法是從小到大擴展,所以每個 \(k\) 的答案都求出來了。
可以看出在限制條件只有兩種時,原先看起來莫名其妙的限制現在可以用擬陣交無腦解決。
6 擬陣的並
下面略過了不少證明過程,因為不想看了。
6.1 定義
當 \(S_i\) 互不相交時擬陣的並的定義比較顯然,即每個部分都要是獨立集才能是獨立集,並且顯然滿足擬陣的條件。但是 \(S\) 有交時就比較迷惑。直接解釋就是,一個集合是獨立集當且僅當存在一個划分成 \(k\) 個子集的方法,使得它們在各自的擬陣中都有定義且是獨立集。為什么這是擬陣呢?
先不加證明地給出秩函數的定義。對於給定的 \(k\) 個擬陣 \(M_i\) 的並的擬陣 \(M\) 的秩函數如下:
為了證明這個秩函數的正確性,還要先證明一個引理。
引理 6.2 :令 \(\hat M=(\hat S,\hat {\mathcal I})\) 為任意一個擬陣,且是 \(k\) 個基礎集互不相交的擬陣 \(\hat M_i=(\hat S_i,\hat {\mathcal I}_i)\) 的並。對於任意一個函數 \(f:\hat S\to S\) ,定義擬陣 \(M=(S, I)\) ,其中 \(\mathcal{I}=\{f(\hat{I}): \hat{I} \in \hat{\mathcal{I}}\}\) , \(f(\hat I)=\large{\cup}_{x\in \hat I} f(\hat x)\) 。那么 \(M\)的秩函數如下:
其中 \(f^{-1}(e)=\{x:f(x)=e\}\) 。
跳了跳了,看不懂了,不想看了……
6.2 獨立集判定問題
雖然證明了擬陣交還是擬陣然而並沒有,但判定一個子集是否是獨立集也不是很好做。
6.2.1 擬陣交
可以利用擬陣交算法。考慮構造兩個擬陣,集合是 \(\{(e,i):e\in U\}\) ,表示把 \(e\) 分到 \(i\) 里面。第一個擬陣限制對於每一個 \(i\) ,選取的 \(e\) 都是獨立集;第二個擬陣限制對於每一個 \(e\) 最多只選取了一個 \(i\) 。然后跑擬陣交,看跑出來的最大大小是否等於 \(|U|\) 。
6.2.2 擬陣划分
用玄妙方法直接解決此問題。假設存在一個划分算法,輸入 \(M_1\cup \cdots \cup M_k\) 的獨立集 \(I\) ,一個關於 \(I\) 的划分 \(I=I_1\cup \cdots \cup I_k,I_i\in \mathcal I_i\) ,和一個不屬於 \(I\) 的元素 \(s\) ,判斷 \(I+\{s\}\) 是否還是獨立集,並給出新的划分,那么就可以支持逐步加元素並判斷是否是獨立集。
類似定義 5.3 (但邊是有向的,從 \(I_i\) 指向 \(S_i\backslash I_i\) ),定義交換圖 \(D_{M_i}(I_i)\) ,然后定義當前的交換圖 \(D\) 是所有 \(D_{M_i}(I_i)\) 的並,對於每個擬陣定義 \(F_i=\{x\in S_i\backslash I_i:I_i+\{x\}\in \mathcal I_i\}\) ,定義 \(F={\large {\cup}} F_i\) 。
定理 6.3 :對於任一元素 \(s\in S\backslash I\) , \(I+\{s\}\in \mathcal I\) 當且僅當存在一條從 \(F\) 到 \(s\) 的有向路徑。
仍然找到最短路徑,設為 \(P=\{s_0,s_1,\cdots,s_p\}\) 。不妨設 \(s_0\in F_1\) 。對於 \(1\le j\le k\) 設 \(S_j=\{s_i,s_{j+1}:(s_i,s_{i+1})\in D_{M_j}(I_j)\}\) 。那么令 \(I'_1=(I_1\Delta S_1)\cup s_0\) ,而對於其他的 \(j\) ,令 \(I'_j=I_j\Delta S_j\) (也就是路徑上的點除了 \(s_0\) 以外全部往前移了一格,換到另一個擬陣中)。
類似擬陣交中的證明,可以得到現在也是一個合法的划分。
必要性不想看了。
6.3 應用
比如可以特殊化擬陣的並,令 \(M^{k}=M \cup M \cup \cdots \cup M\) ,那么可以判斷一個子集是否能划分為不超過 \(k\) 個獨立集。
考慮 \(M^k\)的秩函數 \(r_{M^{k}}(U)=\min _{T \subseteq U}\left(|U \backslash T|+k r_{M}(T)\right)\) ,顯然最小值會在 \(cl(T)=T\) ,即加任何一個元素都會增大 \(r_M(T)\) 時取到。
定理 6.4 (擬陣基覆蓋定理) :一個擬陣 \(M\) 可以被不超過 \(k\) 個基(或是獨立集,無所謂)覆蓋,當且僅當 \(\forall T\subseteq S,|T|\le kr_M(T)\) 。
可以理解為整個可以被覆蓋,當且僅當每個子集都有可能可以被覆蓋。
定理 6.5 (擬陣基包含定理) :一個擬陣 \(M\) 可以包含至少 \(k\) 個互不相交的基,當且僅當 \(\forall T\subseteq S,|S \backslash T| \geq k\left(r_{M}(S)-r_{M}(T)\right)\) 。
至少包含 \(k\) 個互不相交的基等價於 \(M^k\) 的秩至少是 \(k\) 倍 \(M\) 的秩。
二分圖匹配:設左邊有 \(n\) 個點,右邊有 \(m\) 個點,那么可以寫成 \(m\) 個擬陣的並,每個擬陣的元素集合都是 \(\{x_1,x_2,\cdots,x_n\}\) ,獨立集是只有一個點且與 \(y_i\) 有邊,那么二分圖匹配的答案就是擬陣並的秩。可以發現匈牙利算法和擬陣並算法也是類似的。
元旦老人與叢林
(uoj168)
也就是問能否用兩棵生成樹覆蓋邊集。用上面定理 6.6 轉化一下,變成最大權閉合子圖。
但是 6.6 要求不能選擇 \(U=\varnothing\) ,否則 \(|U|-1\) 就不是樹邊個數了。所以還要枚舉強制選一個點,再搞一些操作。
7 擬陣的可表示性
咕了。