二項式反演學習筆記

XuYueming發表於2024-09-11

前言

萬字長文!這裡有我的一些思考和領會,網路上的教程都太潦草了。

並且我發現了新的反演公式

概述

二項式反演用於轉化兩個具有特殊關係的函式 \(f\)\(g\),從而方便求解問題。一般來說,直接計算恰好滿足 \(n\) 個限制的答案不好求,但是可以計算出“至少” / “至多”滿足 \(n\) 個限制的答案,運用二項式反演,就能求出“恰好”滿足 \(n\) 個限制的答案。

想直接看結論的可以戳我

證明 & 推導

一些引理

引理 \(1\):二項式定理

普通二項式定理為:

\[\large (a + b) ^ n = \sum _ {i = 0} ^ n \binom{n}{i} a^i b^{n-i} \]

證明可以用數學歸納法,不做展開。本篇主要利用 \(a = -1, b = 1\) 的特殊情形,即:

\[\begin{aligned} & \quad \ \sum _ {i = 0} ^ n \binom{n}{i} (-1)^i \\ &= \sum _ {i = 0} ^ n \binom{n}{i} (-1)^i 1^{n-i} \\ &= \Big (1 + (-1) \Big )^n \\ &= 0 ^ n \end{aligned} \]

注意到當 \(n = 0\) 的時候,沒有意義。觀察原式發現此時 \(\dbinom{0}{0} (-1)^0 = 1\)。所以我們有:

\[\large \sum _ {i = 0} ^ n \binom{n}{i} (-1)^i = [n = 0] \]

引理 \(2\):多步容斥

\(S_i\)\(1 \leq i \leq n\))表示一個集合,我們有:

\[\large \left \vert \bigcup_{i = 1}^{n} S_i \right \vert = \sum _ {1 \leq i \leq n} \Big \vert S_i \Big \vert - \sum _ {1 \leq i \lt j \leq n} \Big \vert S_i \cap S_j \Big \vert + \cdots + (-1) ^ {n - 1} \Bigg \vert \bigcap _ {i = 1} ^ n S_i \Bigg \vert \]

即:

\[\large \left \vert \bigcup_{i = 1}^{n} S_i \right \vert = \sum _ {m = 1} ^ n (-1) ^ {m - 1} \sum _ {a_i < a_{i + 1}} \Bigg \vert \bigcap _ {i = 1} ^ m S_{a_i} \Bigg \vert \]

證明該式等價於證明 \(\forall x \in \bigcup \limits_{i = 1}^{n} S_i\),其在右邊 \(\sum \limits _ {a_i < a_{i + 1}} \Bigg \vert \bigcap \limits _ {i = 1} ^ m S_{a_i} \Bigg \vert\) 計算的係數之和為 \(1\)。記所有包含 \(x\) 的集合為 \(T_1, \ldots, T_m\)\(m \neq 0\)),則有:

\[\begin{aligned} & \quad \ \Big \vert \{ T_i \mid 1 \leq i \leq m \} \Big \vert - \Big \vert \{ T_i \cap T_j \mid 1 \leq i \lt j \leq m \} \Big \vert + \cdots \\ &= \binom{m}{1} - \binom{m}{2} + \cdots + \cdots (-1) ^ {m - 1} \binom{m}{m} \\ &= \sum _ {i = 1} ^ {m} (-1)^{i - 1} \binom{m}{i} \\ &= - \sum _ {i = 1} ^ {m} (-1)^i \binom{m}{i} \\ &= \binom{m}{0} - \sum _ {i = 1} ^ {m} (-1)^i \binom{m}{i} \\ &= 1 - [m = 0] \\ &= 1 \end{aligned} \]

故成立。

引理 \(3\):組合數

我們考慮變換 \(\dbinom{n}{i} \dbinom{i}{j}\)。其組合意義為,\(n\) 個小球裡選出 \(i\) 個,再從 \(i\) 個裡面選出 \(j\) 的方案數。我們也可以先從 \(n\) 個裡面選出 \(j\) 個,再從剩下 \(n - j\) 裡選出 \(i - j\) 個。表達為:

\[\dbinom{n}{i} \dbinom{i}{j} = \binom{n}{j} \binom{n - j}{i - j} \]

當然也可以代數證明:

\[\begin{aligned} \dbinom{n}{i} \dbinom{i}{j} &= \frac{n!}{i! (n-i)!} \frac{i!}{j! (i-j)!} \\ &= \frac{n!}{(n - i)! (i - j)! j!} \\ &= \frac{n! (n - j)!}{(n - i)! (i - j)! (n - j)! j!} \\ &= \frac{n!}{j! (n - j)!} \frac{(n - j)!}{(n - i)! \Big ((n - j) - (n - i) \Big)!} \\ &= \binom{n}{j} \binom{n - j}{i - j} \end{aligned} \]

引理 \(4\)\(-1\) 的冪次特點

\((-1) ^ {a + b} = (-1) ^ {a - b}\)。這還用證明?

\[\begin{aligned} 2b &\equiv 0 & \pmod {2} \\ b &\equiv -b & \pmod {2} \\ a + b &\equiv a - b & \pmod {2} \end{aligned} \]

模型 \(0\)

\[\large f(x) = \sum _ {i = 0} ^ x (-1)^i \binom{x}{i} g(i) \Longleftrightarrow g(x) = \sum _ {i = 0} ^ x (-1) ^ i \binom{x}{i} f(i) \]

容斥證明

不妨記 \(\overline{S_i}\) 表示 \(S_i\) 的補集,有:

\[\begin{aligned} \left \vert \bigcap_{i = 1}^{n} \overline{S_i} \right \vert &= \left \vert \bigcup_{i = 1}^{n} S_i \right \vert - \left \vert \bigcup_{i = 1}^{n} \overline{S_i} \right \vert \\ &= \left \vert \bigcup_{i = 1}^{n} S_i \right \vert - \sum _ {m = 1} ^ n (-1) ^ {m - 1} \sum _ {a_i < a_{i + 1}} \Bigg \vert \bigcap _ {i = 1} ^ m S_{a_i} \Bigg \vert \\ &= \left \vert \bigcup_{i = 1}^{n} S_i \right \vert + \sum _ {m = 1} ^ n (-1) ^ m \sum _ {a_i < a_{i + 1}} \Bigg \vert \bigcap _ {i = 1} ^ m S_{a_i} \Bigg \vert \\ &= \sum _ {m = 0} ^ n (-1) ^ m \sum _ {a_i < a_{i + 1}} \Bigg \vert \bigcap _ {i = 1} ^ m S_{a_i} \Bigg \vert \\ \end{aligned} \]

由於 \(\overline{\ \overline{S_i}\ } = S_i\),所以得到類似的式子:

\[\left \vert \bigcap_{i = 1}^{n} S_i \right \vert = \sum _ {m = 0} ^ n (-1) ^ m \sum _ {a_i < a_{i + 1}} \Bigg \vert \bigcap _ {i = 1} ^ m \overline{S_{a_i}} \Bigg \vert \]

發現形式很像,但是還差一步構造。我們假設能夠早出一組 \(S_i\),使任意 \(k\) 個集合的交集大小相等。

不妨記 \(f(x)\) 表示任意 \(x\) 個補集的交集大小,對於原集同理記 \(g(x)\),上式可以分別改寫為:

\[f(n) = \sum _ {i = 0} ^ n (-1) ^ i \binom{n}{i} g(i) \]

\[g(n) = \sum _ {i = 0} ^ n (-1) ^ i \binom{n}{i} f(i) \]

即證。

代數證明

容斥比較抽象,嘗試代數證明。我們把 \(g\) 帶到 \(f\) 中去,得到:

\[\begin{aligned} f(x) &= \sum _ {i = 0} ^ x (-1)^i \binom{x}{i} \sum _ {j = 0} ^ i (-1) ^ j \binom{i}{j} f(j) \\ &= \sum _ {i = 0} ^ x f(i) \sum _ {j = i} ^ x (-1) ^ {i + j} \binom{j}{i} \binom{x}{j} \\ &= \sum _ {i = 0} ^ x f(i) \sum _ {j = i} ^ x (-1) ^ {i + j} \binom{x}{i} \binom{x - i}{j - i} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} f(i) \sum _ {j = i} ^ x (-1) ^ {i + j} \binom{x - i}{j - i} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} f(i) \sum _ {j = 0} ^ {x - i} (-1) ^ {2i + j} \binom{x - i}{j} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} f(i) \sum _ {j = 0} ^ {x - i} (-1) ^ j \binom{x - i}{j} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} f(i) [x - i = 0] \\ &= f(x) \end{aligned} \]

即證。

模型 \(1\):“至少” \(\Leftrightarrow\) “恰好”

\[\large f(x) = \sum _ {i = x} ^ n \binom{i}{x} g(i) \Longleftrightarrow g(x) = \sum _ {i = x} ^ n (-1)^{i - x} \binom{i}{x} f(i) \]

為了解決實際問題,考慮實際意義。考慮有 \(n\) 個限制,\(f(x)\) 表示至少滿足 \(x\) 個限制,\(g(x)\) 表示恰好滿足 \(x\) 個限制。

注意到,\(f\) 不是簡單 \(g\) 的字首和,因為會重複計數。

\(g(x)\) 即為我們的答案,而 \(f(x)\) 就是我們透過其他演算法求出的結果。

通常來說,我們會欽定 \(x\) 個限制必須滿足,剩下的限制可以滿足可以不滿足,這樣就能不用考慮限制的問題,求出 \(f\)

考慮如何用 \(g\) 表示出 \(f\)。有兩種思考方式:

  1. 我們考慮求 \(g(x)\) 的過程。初始令 \(g(x) \gets f(x)\),這顯然是不對的。我們考慮一個 \(i > x\)\(g(i)\)\(f(x)\) 中貢獻次數是 \(\dbinom{i}{x}\),所以得到:

    \[g(x) = f(x) - \sum _ {i = x + 1} ^ n \binom{i}{x} g(i) \]

    移項後就有:

    \[\begin{aligned} f(x) &= g(x) + \sum _ {i = x + 1} ^ n \binom{i}{x} g(i) \\ &= \sum _ {i = x} ^ n \binom{i}{x} g(i) \end{aligned} \]

  2. 更直接的思考方式為,我們考慮列舉欽定 \(x\) 個限制必須滿足後,還有 \(i - x\) 個限制也被滿足了,即一共有 \(i\) 個限制被滿足,其中任選 \(x\) 個都能被計數,乘上 \(\dbinom{i}{x}\) 後,求和就能不重不漏:

    \[f(x) = \sum _ {i = x} ^ n \binom{i}{x} g(i) \]

這就是左邊那一條等式了。證明右邊等式是對的,可將其帶入。

\[\begin{aligned} f(x) &= \sum _ {i = x} ^ n \binom{i}{x} \sum _ {j = i} ^ n (-1)^{j - i} \binom{j}{i} f(j) \\ &= \sum _ {i = x} ^ n f(i) \sum _ {j = x} ^ i (-1) ^ {i - j} \binom{j}{x} \binom{i}{j} \\ &= \sum _ {i = x} ^ n f(i) \sum _ {j = x} ^ i (-1) ^ {i - j} \binom{i}{x} \binom{i - x}{j - x} \\ &= \sum _ {i = x} ^ n \binom{i}{x} f(i) \sum _ {j = x} ^ i (-1) ^ {i - j} \binom{i - x}{j - x} \\ &= \sum _ {i = x} ^ n \binom{i}{x} f(i) \sum _ {j = 0} ^ {i - x} (-1) ^ {i - (j + x)} \binom{i - x}{j} \\ &= \sum _ {i = x} ^ n \binom{i}{x} f(i) \sum _ {j = 0} ^ {i - x} (-1) ^ {i - x - j} \binom{i - x}{j} \\ &= \sum _ {i = x} ^ n \binom{i}{x} f(i) [i - x = 0] \\ &= f(x) \end{aligned} \]

即證。

模型 \(2\):“至多” \(\Leftrightarrow\) “恰好”

\[\large f(x) = \sum _ {i = 0} ^ x \binom{x}{i} g(i) \Leftrightarrow g(x) = \sum \limits _ {i = 0} ^ x (-1)^{x - i} \dbinom{x}{i} f(i) \]

當然我們可以直接採用模型 \(1\) 的方式推式子。記 \(f(x)\) 表示至多滿足 \(x\) 個限制的方案,\(g(x)\) 表示恰好。

首先用 \(g\) 表示出 \(f\),這可以列舉並欽定 \(i \leq x\) 個限制,最後求和得出:

\[f(x) = \sum _ {i = 0} ^ x \binom{x}{i} g(i) \]

然後把它帶到 \(g(x) = \sum \limits _ {i = 0} ^ x (-1)^{x - i} \dbinom{x}{i} f(i)\) 中。

\[\begin{aligned} g(x) &= \sum _ {i = 0} ^ x (-1)^{x - i} \dbinom{x}{i} \sum _ {j = 0} ^ i \binom{i}{j} g(j) \\ &= \sum _ {i = 0} ^ x g(i) \sum _ {j = i} ^ x (-1) ^ {x - j} \binom{x}{j} \binom{j}{i} \\ &= \sum _ {i = 0} ^ x g(i) \sum _ {j = i} ^ x (-1) ^ {x - j} \binom{x}{i} \binom{x - i}{j - i} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} g(i) \sum _ {j = i} ^ x (-1) ^ {x - j} \binom{x - i}{j - i} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} g(i) \sum _ {j = 0} ^ {x - i} \binom{x - i}{j} (-1) ^ {x - (j + i)} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} g(i) \sum _ {j = 0} ^ {x - i} \binom{x - i}{j} (-1) ^ {x - i - j} 1 ^ {j} \\ &= \sum _ {i = 0} ^ x \binom{x}{i} g(i) [x - i = 0] \\ &= g(x) \end{aligned} \]

得證。

當然,如果不考慮問題的實際意義,利用模型 \(0\) 也可以證明。設 \(h(x) = (-1) ^ x g(x)\),有:

\[f(x) = \sum _ {i = 0} ^ x \binom{x}{i} h(i) \]

那麼有:

\[g(x) = \frac{h(x)}{(-1) ^ x} = \sum _ {i = 0} ^ x (-1) ^ i \binom{x}{i} f(i) \]

則:

\[\begin{aligned} h(x) &= \sum _ {i = 0} ^ x (-1) ^ {x + i} \binom{x}{i} f(i) \\ &= \sum _ {i = 0} ^ x (-1) ^ {x - i} \binom{x}{i} f(i) \\ \end{aligned} \]

\(h\) 視作命題中的 \(g\),即證。

更多思考

注意到「至多滿足 \(x\) 個條件」,可以看做「至少不滿足 \(n - x\) 個條件」;同理,「至少滿足 \(x\) 個條件」,可以看做「至多不滿足 \(n - x\) 個條件」,然後就可以相互推導,形成新的一對反演公式,我願稱它們為形式 \(2\)

模型 \(1\):“至少” \(\Leftrightarrow\) “恰好”

\[\large f(x) = \sum _ {i = x} ^ n \binom{n - x}{n - i} g(i) \Leftrightarrow g(x) = \sum _ {i = x} ^ n (-1)^{i - x} \binom{n - x}{n - i} f(i) \]

\(f(x) = f'(n - x)\),表示至少滿足 \(x\) 個條件,其中 \(f'\) 就符合模型 \(2\) 了。有 \(f'(x) = \sum \limits _ {i = 0} ^ x \dbinom{x}{i} g'(i)\),其中 \(g'(x)\) 表示恰好不滿足 \(x\) 個條件,相當於 \(g(n - x)\),即恰好滿足 \(n - x\) 個條件,可以得到:

\[\begin{aligned} f(n - x) &= \sum _ {i = 0} ^ x \binom{x}{i} g(n - i) \\ f(x) &= \sum _ {i = 0} ^ {n - x} \binom{n - x}{i} g(n - i) \\ &= \sum _ {i = x} ^ n \binom{n - x}{n - i} g(i) \\ \end{aligned} \]

由於 \(g'(x) = \sum \limits _ {i = 0} ^ x (-1)^{x - i} \dbinom{x}{i} f'(i)\),所以有:

\[\begin{aligned} g(n - x) &= \sum _ {i = 0} ^ x (-1)^{x - i} \binom{x}{i} f(n - i) \\ g(x) &= \sum _ {i = 0} ^ {n - x} (-1)^{(n - x) - i} \binom{n - x}{i} f(n - i) \\ &= \sum _ {i = x} ^ n (-1)^{(n - x) - (n - i)} \binom{n - x}{n - i} f(i) \\ &= \sum _ {i = x} ^ n (-1)^{i - x} \binom{n - x}{n - i} f(i) \\ \end{aligned} \]

所以成立。

模型 \(2\):“至多” \(\Leftrightarrow\) “恰好”

\[\large f(x) = \sum \limits _ {i = 0} ^ x \dbinom{n - i}{n - x} g(i) \Leftrightarrow g(x) = \sum _ {i = 0} ^ x (-1)^{x - i} \binom{n - i}{n - x} f(i) \]

類似地,記 \(f(x) = f'(n - x)\),表示至多滿足 \(x\) 個條件,其中 \(f'\) 就符合模型 \(1\) 了。有 \(f'(x) = \sum \limits _ {i = x} ^ n \dbinom{i}{x} g'(i)\),其中 \(g'(x)\) 表示恰好不滿足 \(x\) 個條件,相當於 \(g(n - x)\),即恰好滿足 \(n - x\) 個條件。可以得到:

\[\begin{aligned} f(n - x) &= \sum \limits _ {i = x} ^ n \dbinom{i}{x} g(n - i) \\ f(x) &= \sum \limits _ {i = n - x} ^ n \dbinom{i}{n - x} g(n - i) \\ &= \sum \limits _ {i = 0} ^ x \dbinom{n - i}{n - x} g(i) \\ \end{aligned} \]

由於 \(g'(x) = \sum \limits_ {i = x} ^ n (-1)^{i - x} \dbinom{i}{x} f'(i)\),所以有:

\[\begin{aligned} g(n - x) &= \sum _ {i = x} ^ n (-1)^{i - x} \binom{i}{x} f(n - i) \\ g(x) &= \sum _ {i = n - x} ^ n (-1)^{i - (n - x)} \binom{i}{n - x} f(n - i) \\ &= \sum _ {i = 0} ^ x (-1)^{(n - i) - (n - x)} \binom{n - i}{n - x} f(i) \\ &= \sum _ {i = 0} ^ x (-1)^{x - i} \binom{n - i}{n - x} f(i) \\ \end{aligned} \]

所以成立。

例題 & 習題

等有時間再寫啦。

結論

模型 \(0\)

\[\Large f(x) = \sum _ {i = 0} ^ x (-1)^i \binom{x}{i} g(i) \Longleftrightarrow g(x) = \sum _ {i = 0} ^ x (-1) ^ i \binom{x}{i} f(i) \]

模型 \(1\):“至少” \(\Leftrightarrow\) “恰好”

形式 \(1\)

\[\Large f(x) = \sum _ {i = x} ^ n \binom{i}{x} g(i) \Longleftrightarrow g(x) = \sum _ {i = x} ^ n (-1)^{i - x} \binom{i}{x} f(i) \]

形式 \(2\)

\[\Large f(x) = \sum _ {i = x} ^ n \binom{n - x}{n - i} g(i) \Leftrightarrow g(x) = \sum _ {i = x} ^ n (-1)^{i - x} \binom{n - x}{n - i} f(i) \]

模型 \(2\):“至多” \(\Leftrightarrow\) “恰好”

形式 \(1\)

\[\Large f(x) = \sum _ {i = 0} ^ x \binom{x}{i} g(i) \Longleftrightarrow g(x) = \sum \limits _ {i = 0} ^ x (-1)^{x - i} \dbinom{x}{i} f(i) \]

形式 \(2\)

\[\Large f(x) = \sum \limits _ {i = 0} ^ x \dbinom{n - i}{n - x} g(i) \Longleftrightarrow g(x) = \sum _ {i = 0} ^ x (-1)^{x - i} \binom{n - i}{n - x} f(i) \]

相關文章