F+1的頹廢生活


最近干了四件事情:

一.二項式反演形式零與容斥原理的關系;

二.二項式反演形式一與形式二之間的聯系;

三.二項式反演形式一,形式二與容斥原理的關系;

四.如何卡並查集純路徑壓縮.

一.

從容斥原理開始.

\(|A_1\cup A_2\cup \cdots \cup A_n|=\sum_{1\le i\le n}|A_i|−\sum_{1\le i< j\le n}|A_i\cap A_j|+\cdots +(−1)^{n−1}\times |A_1\cap A_2\cap \cdots \cap A_n|\)

證明一:

設某一元素被\(m\)個集合所包含,則其對左側的貢獻為\(1\);

對右側的貢獻為\(\sum_{i=1}^m(−1)^{i−1}\tbinom mi=−\sum_{i=1}^m(−1)^i\tbinom mi=1−\sum_{i=0}^m(−1)^i\tbinom mi=1−(1−1)^m=1\).

證畢.

證明二(數學歸納法):

不想寫了貼一個鏈接:容斥原理_百度百科 (baidu.com).

形式零:

沿用剛剛容斥的公式,記\(A^c_i\)表示\(A_i\)的補集,則將一般形式變形,可以得到:

\(|A^c_1\cap A^c_2\cap \cdots \cap A^c_n|=|S|−\sum_{1\le i\le n}|A_i|+∑_{1\le i< j\le n}|A_i\cap A_j|−\cdots +(−1)^n\times |A_1\cap A_2\cap \cdots \cap A_n|\)

同時,由於補集的補集就是原集,因此又有:

\(|A_1\cap A_2\cap \cdots \cap A_n|=|S|−\sum_{1\le i\le n}|A^c_i|+∑_{1\le i< j\le n}|A^c_i\cap A^c_j|−\cdots +(−1)^n\times |A^c_1\cap A^c_2\cap \cdots \cap A^c_n|\)

考慮一種特殊情況:多個集合的交集大小只和集合的數目有關.

\(f_n\)表示\(n\)個補集的交集大小,\(g_n\)表示\(n\)個原集的大小,則兩個公式分別可以寫成:

\(f_n=\sum_{i=0}^n(−1)^i\tbinom nig_i\)

\(g_n=\sum_{i=0}^n(−1)^i\tbinom nif_i\)

顯然這兩個公式是等價關系,更是相互推導的關系,於是我們得到了二項式反演的形式零:

\(f_n=\sum_{i=0}^n(−1)^i\tbinom ni g_i\Leftrightarrow g_n=\sum_{i=0}^n(−1)^i\tbinom nif_i\)

通過代入證明的方法PYB的PPT上有,這里就不放了.

二.

形式一:

\(f_n=\sum_{i=0}^n\tbinom nig_i\Leftrightarrow g_n=\sum_{i=0}^n(−1)^{n−i}\tbinom nif_i\)

形式二:

\(f_n=\sum_{i=n}^m\tbinom ing_i\Leftrightarrow g_n=\sum_{i=n}^m(−1)^{i−n}\tbinom inf_i\)

我們假設有這樣一道題目:有\(m\)個集合,集合的交集大小只和集合的數目有關,已知\(d_n\)表示集合數目至少為\(n\)的多個集合交集的大小,求集合數目恰好為\(n\)的多個及集合交集並的大小.

先考慮形式二.我們設\(g_i\)表示集合數目恰好為\(i\)的多個集合交集的大小的,\(f_i\)表示集合數目至少為\(i\)的多個集合交集的大小的,答案為\(g_n\).

\(f_i=\tbinom mnd_i\)

\(g_n=\sum_{i=n}^m(−1)^{i−n}\tbinom inf_i=\sum_{i=n}^m(−1)^{i−n}\tbinom in\tbinom mid_i\)

考慮形式一.我們假設我們已經確定了\(n\)個集合必選\(\tbinom mn\),設\(e_i\)表示集合數目恰好為\(m-i\)的多個集合交集的大小,\(h_i\)表示集合數目至少為\(m-i\)的多個集合交集的大小,答案為\(\tbinom mne_{m-n}\).

\(h_i=d_{m-i}\)

\(h_j=\sum_{i=0}^j\tbinom jie_i\)

\(\tbinom mne_{m-n}=\sum_{i=0}^{m-n}(−1)^{m-n−i}\tbinom {m-n}ih_i=\sum_{i=0}^{m-n}(−1)^{m-n−i}\tbinom mn\tbinom {m-n}id_{m-i}\)

不難發現兩個式子本質相同,這就是為什么大多數題目中兩者都可以推出正確答案的原因,也是為什么它們都被稱為二項式反演的原因.

三.

先看形式二,\(f_n\)\(g_n\)的定義與上面的定義相同,取\(n=0\)時即為容斥原理.或是把形式三看作確定了\(m\)個集合確定了\(n\)個后的形式一.

考慮對於形式一,\(f_i\)可以看作集合數目至多為\(i\)的多個集合的交集.考慮用集合補集來表示,即集合補集數目至少為\(m-i\)的多個集合補集的交集.

四.

Tarjan的卡法基於一種特殊定義的樹.

定義:這種特殊的樹為\(T_k\),其中\(T_1,T_2,\cdots ,T_j\)都是一個單獨的點,對於\(T_k(k> j)\),\(T_k\)就是\(T_{k−1}\)再接上一個\(T_{k−j}\)作為它的兒子.

Tk

例子

這種定義有一個有趣的特性,如果我們把它繼續展開,可以得到各種有趣的結果.比如我們把上面圖中的\(T_{k−j}\)繼續展開,就會變成\(T_{k−j−1}\)接着\(T_{k−2j}\),以此類推可以展開出一串.而如果對\(T_{k−1}\)繼續展開,父節點就會變成\(T_{k−2}\),子節點多出一個\(T_{k−j−1}\),以此類推可以展開成一層樹.下面的圖展示了展開\(T_k\)的不同方式.

展開

我們用圖5的方式展開出\(j\)棵子樹,再按圖4展開(假設\(j\)整除\(k\)).

神奇的展開

如果在最頂上再加一個點,然后\(j\)次訪問底層的\(T_1,T_2,⋯,T_j\).就可以把樹壓成圖5的樣子了,不過會多一個單點的兒子出來,因為圖6中其實有兩個\(T_j\)(因為圖4展開到最后一層沒有了\(−1\),所以會和上一層出現一次重復).這么一來,我們又可以做一次這一系列操作了(原論文里把這個叫做self-reproduction).

self-reproduction

至於\(T_k=T_{k-1}+T_{k-j}=T_{k-2}+T_{k-j-1}+T_{k-j}=\cdots=T_{k-j}+\sum_{l=0}^{j-1}T_{k-j-l}\le (j+1)T_{k-j}\),\(T_j=1=(j+1)^0\),所以\(T_k\le(j+1)^{\frac kj-1}\).

\(m\)代表詢問操作數,\(n\)代表合並操作數,\(m\ge n\).我們取\(j=\lfloor \frac mn\rfloor,i=\lfloor log_{j+1}\frac n2\rfloor+1,k=ij\).那么\(T_k\le (j+1)^{i−1}=\frac n2\).接下來我們做\(\frac n2\)組操作,每組在最頂上加入一個點,然后對底層的\(j\)個節點逐一查詢,每次查詢的路徑長度都是\(i+1\).同時總共的查詢次數還是不超過\(m\).於是總共的復雜度是\(O(n+\frac n2j(i+1)=n+mlog_{1+\frac mn}n)\).

至於康老師為什么會認為路徑壓縮的並查集平均每次時間復雜度為\(O(1)\),最主要是因為忽略了每次路徑壓縮時會產生不只\(1\)條新邊.

參考資料:

康復計划#4 快速構造支配樹的Lengauer-Tarjan算法 - MoebiusMeow - 博客園 (cnblogs.com)

Worst-Case Analysis of Set Union Algorithms

二項式反演及其應用 - GXZlegend - 博客園 (cnblogs.com)

題解 P3270【JLOI2016成績比較】 - ffffyc 的基地 - 洛谷博客 (luogu.com.cn)

題解 P3270 【JLOI2016成績比較】 - M_sea 的博客 - 洛谷博客 (luogu.org)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM