前言
萬字長文!這裡有我的一些思考和領會,網路上的教程都太潦草了。
並且我發現了新的反演公式!
概述
二項式反演用於轉化兩個具有特殊關係的函式 \(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\)。有兩種思考方式:
- 我們考慮求 \(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}
\]
- 更直接的思考方式為,我們考慮列舉欽定 \(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)
\]