容斥/反演算法知識簡述

前言

這只是一個比較基礎的容斥/反演學習筆記。
包含了一大堆鍋一些反演的基礎知識點和證實過程。
若有不足之處但願大佬多加指點。html

反演的定義和反演算法的基本原理

假設有兩個函數\(f(x)\)\(g(x)\)知足\[f(n) = \sum_{k} a_{n, k} g(k)\]
已知\(f\)\(g\)的過程就叫作反演。
如今假設咱們已經求出了\(g\)關於\(f\)的表達式\[g(n)=\sum_{k}\mu(n,k)f(k)\]
代入前式,咱們有\[f(n)=\sum_{k}a_{n,k}\sum_{m}\mu(k,m)f(m)=\sum_{m}f(m)\sum_{k}a_{n,k}\mu(k,m)\]
那麼只須要\(\sum_{k}a_{n,k}\mu(k,m)=[n=m]\)便可。
能夠經過矩陣求逆直接求解\(\mu(n,m)\)
一些具備特殊係數的求和式,其\(\mu\)能夠快速求出,爲解題提供思路。算法

求反演式時,通常根據題意設\(g(n)\sum_{m}[n=m]g(m)\),而後將\([n=m]\)表達的式子代入求解,
整理後根據\(f\)\(g\)的關係式代入\(f(m)\)即求解完成。ide

二項式反演

\[f(n)=\sum_{m=0}^n\binom{n}{m}g(m)\]
咱們知道\(\sum_{i=0}^{n}(-1)^i\binom{i}{n}=[n=0]\),那麼因爲\([n=m]=[n-m=0]\),
那麼從求和式開始變換:
\[ \begin{aligned} g(n)&=\sum_{m=0}^{n}[n-m=0]\binom{n}{m}g(m)\\ &=\sum_{m=0}^{n}\sum_{k=0}^{n-m}(-1)^k\binom{n-m}{k}\binom{n}{m}g(m)\\ &=\sum_{k=0}^{n}(-1)^k\binom{n}{k}\sum_{m=0}^{n-k}\binom{n-k}{m}g(m)\\ &=\sum_{k=0}^{n}(-1)^k\binom{n}{k}f(n-k)\\ \end{aligned} \]
因而有\[g(n)=\sum_{k=0}^{n}(-1)^{n-k}\binom{n}{k}f(k)\]函數

這個過程其實就是在說明:\[\sum_{m=k}^{n}(-1)^{m-k}\binom{n}{m}\binom{m}{k}=[n=k]\]學習

子集反演

\[f(S)=\sum_{T\subseteq S}g(T)\]spa

\(\sum_{i=0}^{n}(-1)^i\binom{i}{n}=[n=0]\)能夠知道\(\sum_{T\subseteq S}(-1)^{|T|}=[S=0]\),這裏\(0\)表示空集。.net

\[ \begin{aligned} g(S)&=\sum_{T\subseteq S}[S-T=0]g(T)\\ &=\sum_{T\subseteq S}\sum_{Q\subseteq S-T}(-1)^{|Q|}g(T)\\ &=\sum_{Q\subseteq S}(-1)^{|Q|}\sum_{T\subseteq S-Q}g(T)\\ &=\sum_{Q\subseteq S}(-1)^{|Q|}f(S-Q)\\ \end{aligned} \]
因而有\[g(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}f(T)\]htm

這個過程其實就是在說明:\[\sum_{T\subseteq Q\subseteq S}(-1)^{|Q|-|T|}=[S=T]\]blog

多重子集反演

如今\(S,T\)變成了多重集。
定義\(\varphi(S)\),當\(S\)中包含重複元素時爲\(0\),不包含時爲\((-1)^{|S|}\)
那麼一樣有\(\sum_{T\subseteq S}\varphi(|T|)=[S=0]\)
相似上面的變換,能夠獲得\[g(S)=\sum_{T\subseteq S}\varphi(S-T)f(T)\]get

反方向的子集反演

\[f(S)=\sum_{S\subseteq T}g(T)\]

\[ \begin{aligned} g(S)&=\sum_{S\subseteq T}[T-S=0]g(T)\\ &=\sum_{S\subseteq T}\sum_{Q\subseteq T-S}(-1)^{|Q|}g(T)\\ &=\sum_{S\subseteq Q}(-1)^{|Q|-|S|}\sum_{Q\subseteq T}g(T)\\ &=\sum_{S\subseteq Q}(-1)^{|Q|-|S|}f(Q)\\ \end{aligned} \]
因而有
\[g(S)=\sum_{S\subseteq T}(-1)^{|T|-|S|}f(T)\]

子集卷積

\[c_S = \sum_{T \subseteq s} a_T b_{S-T}\]
對於子集反演,限制集合的大小進行轉移便可。

簡而言之,由於以前反方向的子集反演,咱們能夠處理出
\[c_r = \sum_{p,q}[p\ or\ q=r]a_pb_q\]

但若是直接照搬,會出現\(p,q\)有交的狀況
所以須要限制集合大小,即求\(\sum_{|r|=k}c_r\)時,
對於\(p,q\)須要有\(p\ or\ q\)\(|p|+|q|=|r|\)
那麼對於一類大小爲\(i\)集合地進行\(i\)次這樣的運算便可。故時間複雜度爲\(O(n^2logn)\)

莫比烏斯反演

\[f(n)=\sum_{d}[d|n]g(d)\]

由於每一個正整數都能根據質因子分解對應一個質數的多重集,你會發現這其實就是子集反演。
因而你忽然發現再證下去沒意思了
那麼定義\(\mu(n)\),當\(n\)分解出重複質因數時爲\(0\),不然爲\((-1)^p\),其中\(p\)爲質因子個數...
因而有\(\sum_{d|n}\mu(n)=[n=1]\)

\[ \begin{aligned} g(n)&=\sum_{d|n}[\frac{n}{d}=1]g(d)\\ &=\sum_{d|n}\sum_{t|\frac{n}{d}}\mu(t)g(d)\\ &=\sum_{t|n}\mu(t)\sum_{d|\frac{n}{t}}g(d)\\ &=\sum_{t|n}\mu(t)f(\frac{n}{t})\\ \end{aligned} \]

因而有
\[g(n)=\sum_{d|n}\mu(\frac{n}{d})f(d)\]

反方向的莫比烏斯反演

\[f(n)=\sum_{d}[n|d]g(d)\]

反方向的多重子集反演。
\[g(n)=\sum_{n|d}\mu(\frac{d}{n})f(d)\]

單位根反演(離散傅里葉變換)

\begin{aligned}
f(n)&=\sum_{k=0}^{m-1}\epsilon^{nk}g(k)\
g(n)&=\frac{1}{m}\sum_{k=0}^{m-1}\epsilon^{-nk}f(k)
\end{aligned}
其中\(\epsilon=e^{-\frac{2\pi i}{m}}\)\(m\)次單位根,即\(\epsilon^m=1\);
本人線代太差,不會剛這個式子。有興趣的大佬能夠去這位神仙的博客看看。

這裏反演的直接意義是\(DFT\)\(IDFT\)

還有一個這樣的式子:
\[\frac{1}{m}\sum_{i=0}^{m-1}\epsilon^{ni}=[n\ mod\ m=0]\]

證實:當\(n\ mod\ m\not= 0\)時原式\(=\frac{\epsilon^{nm}-1}{\epsilon^n-1}=0\),當\(m|n\)\(\epsilon^n=1\)

斯特林反演

\[ \begin{aligned} f(n)&=\sum_{k=0}^n \begin{Bmatrix}n\\k\\ \end{Bmatrix}g(k) \\ g(n)&=\sum_{k=0}^n(-1)^{n-k}\begin {bmatrix} n\\k \end{bmatrix}f(k)\\ \end{aligned} \]

根據上面的反演條件,咱們只須考慮證實
\[\sum_{m=k}^{n}(-1)^{m-k}\begin{Bmatrix}n\\m\\\end{Bmatrix}\begin{bmatrix}m\\k\\\end{bmatrix}=[n=k]\]

這個公式叫作反轉公式...
這個式子還有另外一個形式,即\[\sum_{m=k}^{n}(-1)^{m-k}\begin{bmatrix}n\\m\\\end{bmatrix}\begin{Bmatrix}m\\k\\\end{Bmatrix}=[n=k]\]

也就是說,斯特林反演包含了不一樣方向的反演。
爲表示簡潔,這裏只證其中一個。

咱們考慮兩類斯特林數和降低冪,上升冪的關係:
\[n^m=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\binom{n}{k}k!=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}n^{\underline{k}}\]

\[n^{\overline{m}}=\sum_{k=0}^{m}\begin{bmatrix}m\\k\\\end{bmatrix}n^k\]

其中\(n^{\underline{k}}\)表示\(n\)\(k\)階降低冪,\(n^{\overline{k}}\)表示\(n\)\(k\)階上升冪。

第一個式子由組合意義立得。使用數學概括法證實第二個式子:

\[ \begin{aligned} n^{\overline{m}}&=(n+m-1)n^{\overline{m-1}}\\ &=(n+m-1)\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^k\\ &=(m-1)\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^k+\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^{k+1}\\ &=\sum_{k=1}^{m}\begin{bmatrix}m-1\\k-1\\\end{bmatrix}n^k+(m-1)\sum_{k=0}^{m-1}\begin{bmatrix}m-1\\k\\\end{bmatrix}n^k\\ &=\sum_{k=0}^{m}n^k(\begin{bmatrix}m-1\\k\\\end{bmatrix}+(m-1)\begin{bmatrix}m-1\\k-1\\\end{bmatrix})\\ &=\sum_{k=0}^{m}n^k\begin{bmatrix}m\\k\\\end{bmatrix}\\ \end{aligned} \]
證畢。

此時能夠證實反轉公式:
\[ \begin{aligned} n^m&=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}n^{\underline{k}}\\ &=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}(-1)^k(-n)^{\overline{k}}\\ &=\sum_{k=0}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}(-1)^k\sum_{i=0}^{k}(-n)^i\begin{bmatrix}k\\i\\\end{bmatrix}\\ &=\sum_{i=0}^{m}(-n)^i\sum_{k=i}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\begin{bmatrix}k\\i\\\end{bmatrix}(-1)^k\\ &=\sum_{i=0}^{m}n^i\sum_{k=i}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\begin{bmatrix}k\\i\\\end{bmatrix}(-1)^{k-i}\\ \end{aligned} \]
因而有\(\sum_{k=i}^{m}\begin{Bmatrix}m\\k\\\end{Bmatrix}\begin{bmatrix}k\\i\\\end{bmatrix}(-1)^{k-i}=[m=i]\)。證畢。

反轉公式證實完畢,則斯特林反演的正確性也隨之獲得證實。

Min-max容斥(最值反演)

根據上面的定義,嚴格的說這玩意應該不屬於反演,但它是很是重要的。
\[max\{S\}=\sum_{T\in S}(-1)^{|T|-1}min\{T\}\]考慮每一個元素的出現次數便可證實。

\(max\)\(min\)交換便可獲得另外一個公式。

在求lcm上的應用

\[lcm(a_1,a_2,...a_n)=\prod_{p}p^{max_{i=1}^{n}r_i}=\prod_{p}p^{\sum_{S\subseteq[n]}(-1)^{|S|-1}min_{i\in S}r_i}=\prod_{S\subseteq [n]}gcd(S)^{(-1)^{|S|-1}}\]

在指望中的應用

假設\(S\)中的元素都是隨機變量,兩邊求指望並根據指望的線性性能夠獲得\[E(max\{S\})=\sum_{T\in S}(-1)^{|T|-1}E(min\{T\})\]假設這些隨機變量表示一個元素出現的指望時間,且元素之間相互獨立。
那麼\(max\{S\}\)表示S中全部元素至少出現一次的指望時間,
\(min\{S\}\)表示S中至少出現一個元素的指望時間

通常而言\(min\{S\}\)好求而\(max\{S\}\)難求,此時經過最值反演便可解決問題。

Min-max容斥的一個擴展:k-min-max容斥

咱們定義一個容斥係數\(f(x)\),使得
\[kmax\{S\}=\sum_{T\in S}f(|T|)min\{T\}\]
因爲是線性變換,假設\(|T|=x+1\),考慮\(min\{T\}\)對答案的貢獻,爲\(\sum_{i=0}^{x}\binom{x}{i}f(i+1)\)
因而有\[[x=k-1]=\sum_{i=0}^{x}\binom{x}{i}f(i+1)\]

二項式反演能夠獲得:\[f(x+1)=\sum_{i=0}^{x}(-1)^{x-i}\binom{x}{i}[i=k-1]=(-1)^{x-k+1}\binom{x}{k-1}\]

因而容斥係數\(f(x)=(-1)^{x-k}\binom{x-1}{k-1}\)

所以\[kmax\{S\}=\sum_{T\in S}(-1)^{|T|-k}\binom{|T|-1}{k-1}min\{T\}\]

參考資料:
炫酷反演魔術
斯特林數-斯特林反演
min-max容斥及其推廣

相關文章
相關標籤/搜索