二項式反演學習筆記

2022-05-16 11:41:22 字數 3977 閱讀 7576

這是同屆隊爺 2020 年 5 月學的

為什麼我怎麼菜現在才學嗚嗚嗚嗚。。。

眾所周知,奇偶布的容斥很差,是乙個板子都不會的傻子。二項式反演是一種廣義容斥,只需要將具有容斥關係的狀態設出套式子就可以解決容斥問題的工具。所以一些容斥很好的 \(\texttt \) 是沒有必要學習二項式反演的qaq。

理論部分:

二項式反演主要有三個式子,最基礎的式子是:

\[f(n) = \sum_^n (-1)^i g(i)\\

g(n) = \sum_^n (-1)^i f(i)\\

\]這是二項式反演的基礎式子,而對於反演的證明,諸如此類 \(\sum\) 從 \(0\to n\) 的,我們可以通過證明 \(\sum_^n (-1)^ = e\) 來完成。

注意到這裡出現類諸如 \(\) 的形式,我們有第乙個組合恒等式:(當然組合意義更好記憶)

\[ = \frac = \frac \times \frac =

\]有了這個組合恒等式,我們變化一下式子:

\[\sum_^n(-1)^ = (-1)^j \sum_^n(-1)^i

\]求和那一部分長得像二項式定理,換個元看一看(主要換組合式子裡的),令 \(t = n - i\) ,那麼求和部分變為:

\[\sum_^(-1)^ = (-1)^n (1 - 1)^

\]所以當且僅當 \(n = j\) 時,原式 \(=1\),否則 \(=0\)。所以 \(\texttt \)。

但是我們可以發現這乙個基礎式子不怎麼好用,很少有兩種容斥狀態之間的關係存在 \((-1)^\) ,一般都是至多至少與恰好。所以我們對這乙個基礎式子變一下形。

我們令 \(h(n) = (-1)^ng(n)\) ,這樣就能將 \((-1)^n\) 去掉,我們就得到了第二個二項式反演的式子:

\[f(n) = \sum_^nh(i)\\

h(n) = \sum_^n(-1)^ f(i)

\]我們可以觀察到,現在 \(f\) 與 \(h\) 有了明確的容斥關係,此時 \(h(i)\) 表示恰好為 \(i\) 的計數部分,\(f(n)\) 表示至多為 \(n\),並在 \(n\) 中任意選取的總的計數部分。

但做過很多題目的 \(\texttt \) 會發現,你這也沒把所有容斥題目包含完啊,還有很多題目 \(f\) 與 \(g\) 的關係是"至少/欽定""恰好"呢,你上面的式子只能計算至多時好計算的呢!所以,有 \(\texttt \) 就得到了第三個式子。

\[f(n) = \sum_^ g(i) \\

g(n) = \sum_^m (-1)^ f(i)

\]這裡的 \(m\) 一般是題目給定的上界。

具體的證明可以直接帶入,但過程比較複雜,這裡就不放了(。

容易發現,這裡 \(f\) 一般是欽定或者是至少選了 \(n\) 項,當這玩意好算的時候我們就會用這個。

理論部分結束qaq。

有 \(\texttt\) 可能會發現,這玩意拋開容斥組合意義不看,和莫比烏斯反演至少在 \(f/g\) 這裡有相似之處。一是也有兩種形式供君選擇,二是我們往往會令答案需要求的為 \(g\) ,並且題目的性質出發,去設出恰當好算的 \(f\) ,然後再得到答案。

經典例題:

1. 至多問題:

problem.對乙個排列 \(a_i\) 任意打亂順序,請你求出有多少種排列方式,使得存在 \(a_i \not= i\) 。

solution: 我們可以發現,我們好判斷的是 \(a_i = i\) ,所以我們可以欽定有多少個 \(a_i = i\),那麼剩下的隨便排,所以得到了狀態 \(f\), \(f(n)\) 表示至多存在 \(n\) 個數滿足了錯排的樣子。所以直接使用形式 \(2\) ,我們要求的 \(g(n)\) 是表示恰好有 \(n\) 個數滿足錯排,他們之間的關係滿足形式 \(2\) :\(f(n) = \sum_^ng(i)\),並且 \(f(n)\) 方便求得,故直接算即可。

2. 至少/欽定問題:

problem.有乙個 \(n\) 個元素的集合,一共有 \(2^n\) 個子集,請你找出若干子集(至少有乙個),使得他們的交集有 \(k\) 個元素,求出找子集的方案數。

solution: 我們先找到 \(k\) 個元素,並且將其欽定為必須選擇的 \(k\) 個,剩下的 \(n - k\) 個元素可選可不選,那麼現在找若干集合的方案數好求, \(f(k) = (2^} - 1)\) :表示現在所選集合交集至少有 \(k\) 個元素的方案數。\(g(n)\) 與其滿足形式 \(3\) :\(f(n) = \sum_^m g(i)\) ,故 \(g\) 可以直接算出。

擴充套件題目:

cf997c sky full of stars:

​ 有乙個 \(n \times n\space (1 \le n \le 10^6)\) 的正方形網格,用三種顏色染色,求有多少種染色方案使得至少一行或一列是同一種顏色。

solution:如果直接用組合式去表達染色的方案數的話,可以發現是會有重複的。既然存在重複的部分,並且這重複的部分已經能夠用組合式子 表達出來了,所以不難想到使用容斥解決。我們設 \(g(i,j)\) 表示恰好有 \(i\) 行 \(j\) 列是同一種顏色,那麼答案就可以被表示為 \(3^ - g(0,0)\) 。考慮求 出 \(g(0,0)\) ,那麼根據剛才發現設 \(f(i,j)\) 表示為至少 \(i\) 行 \(j\) 列是同一種顏色,其滿足 \(f(x,y) = \sum_^n\sum_^n(-1)^g(i,j)\) 。所以 \(g\) 可以 通過反演求得,但由於 \(n\) 過大,所以我們要變換一下式子。(以下的式子只是一部分需要推的)

\[\sum_^n\sum_^n(-1)^f(i,j) = \sum_^n (-1)^i\sum_^n(-1)^j 3^

\]​ 觀察,裡面有 \((-1)^i\) ,考慮二項式定理,把 \(i,j\) 的部分分開放。

\[=3^\sum_^n (-1)^i3^\sum_^n(-1)^j 3^\\

=3^\sum_^n (-1)^i3^\sum_^n(-1)^j (-3)^ \\

=3^\sum_^n (-1)^i3^((1 - 3^)^n - 1) \\

\]​ 便可以 \(o(nlogn)\) 計算了。

[agc035f] two histograms

​ 有乙個 \(n \times m\space (1 \le n,m \le 5 \times 10^5)\) 的棋盤,對於每一行和每一列選擇當前行和列的乙個格仔,並將從這個行或列的起始點到這個格仔全部 \(+1\),得到的棋盤本質不同的有多少種。

solution: 隨便操作一下,容易發現很容易就將染出重複顏色棋盤來。重複的原因在於一行一列交在了一起並且不再向下延申,而此時這種染色 情況對應了兩種染色的方案,所以我們規定當且僅當行染到這裡才是合法的,明顯地,這樣規定之後不會對答案產生干擾。這樣對重複的東西規 定之後,不難想到使用容斥(二項式反演)來統計方案,我們設 \(f(i)\) 表示規定 \(i\) 個位置不合法,其餘隨便填。那麼 \(f(i)\) 方便表示出來。

\[f(i) = i! (m + 1)^(n + 1)^

\]​ 具體意義是,我們先隨便選將要產生不合法的行和列,然後利用 \(i!\) 對行和列進行配對,這樣對於選取的行和列而言,其結果已經固定,再對剩下 的行和列進行選取。有了這乙個那麼 \(g(i)\) 就會是恰好 \(i\) 個位置不合法,答案將會是 \(g(0)\) 。其滿足 \(f(i) = \sum_^n g(j)\) ,所以 \(g(0)\) 可由反演得 出 \(g(0) = \sum_^n (-1)^i f(i)\)。

學習筆記 二項式反演

f n sum n 1 i binom n i g i leftrightarrow g n sum n 1 i binom n i f i 這個式子可以通過集合相關知識得到 容斥 然後令 h n 1 ng n 那麼有 f n sum n binom n i h i leftrightarrow f...

學習筆記 二項式反演

二項式反演的常見形式有如下兩種 f n sum n binom ni g i longleftrightarrow g n sum n 1 binom ni f i f n sum m binom in g i longleftrightarrow g n sum m 1 binom in f i ...

二項式反演學習筆記

這是一篇防遺忘的二項式反演證明部落格 在此不給出精妙的容斥證明,開始推代數證明 眾所周知二項式反演有兩個形式 f n sum 1 binomg i leftrightarrow g n sum 1 binomf i 這個式子簡直妙啊 太對稱了 然而它更常用的形式是這個 f n sum binomg ...