二项式反演
定理 1:F(n)=∑ni=0(ni)G(i)⇔G(n)=∑ni=0(−1)n−i(ni)F(i)
证明:
提取系数有 F[n]=∑ni=0(ni)G[n]
→F[n]n!=n∑i=01(n−i)!G[i]i!
构造指数生成函数 f(n)=∞∑i=0F[i]i!xi,g(n)=∞∑i=0G[i]i!xi,E(x)=ex=∞∑i=0xii!
可以发现卷积形式:f=g∗E
于是,g=f∗E−1=f∗e−x
所以可以得到 g[n]=G[n]n!=n∑i=0f[i]×(−1)n−i1(n−i)!
整理得:G[n]n!=n∑i=0F[i]i!×(−1)n−i1(n−i)!
证毕。
稍微变换一下,可以得到二项式反演的另一种形式。
定理 2: F(n)=n∑i=0(−1)i(ni)G(i)⇔G(n)=n∑i=0(−1)i(ni)F(i)
非常的对称唉。可以发现这只在定理 1 移动了 −1 的次幂。
定理 3: F(n)=∑i=n(in)G(i)⇔G(n)=∑i=n(−1)i−n(in)F(i)
由对定理 2 关系矩阵进行转置可知。
定理 2,3 的证明可以戳这里 → 反演原理
定理 4: 移动定理 3 中 −1 的次幂,可得 F(n)=∑i=n(−1)i(ni)G(i)⇔G(n)=∑i=n(−1)i+(ni)F(i)
错排问题与二项式反演:
问题:设 a1∼n 是 1∼n 的一个排列,且 ∀i∈(1,n),ai≠i 。
求满足条件的排列的方案数。
解:
设 D[n] 表示 n 个数的错排方案数(即满足 ai≠i )。
那么有 n!=∑ni=0(ni)D[i] ,即:n 个数的全排列数 = ∑ni=0 选择 i 个数的错排方案数。
这不就是二项式定理的标准形式吗。
二项式反演一下得到,D[n]=n∑i=0(−1)n−in!(n−i)!
→D[n]=n!n∑i=0(−1)ii!
这样,就求得了错排公式 D[n]=n!n∑i=0(−1)ii!
应用
若记 f(k) 表示:n 个数钦定选 k 个 ai=i ,其余的任意排列;记 g(k) 表示 n 个数恰好选 k 个,其余的都满足 ai≠i。
那么对于任意的 f(k) 有 f(k)=n∑i=k(ik)g(i)
p.s f(k) 表示钦定选 k 个,然后统计钦定情况如此的方案数,对某一种情况会重复计算(我也不知道为什么要用钦定这个词,但似乎好像没有更好的词了)。
对于恰好选 i 个的情况,有 (ik) 种钦定方式。于是 f(k)=n∑i=k(in)g(i)
可能这样仍然不够明晰,举个例子(辨别钦定 k 个和至少 k 个(设为 h(k) )的区别):
有 1,2 共 2 个数,则 f(1)=2 ,而 h(1)=1
f(1) 的产生共有 2 种方案:
-
钦定 1 不动,计算一次排列 {1,2}
-
钦定 2 不动,又计算一次排列 {1,2}
而 h(i) 仅会有 1 种方案,即 {1,2}
使用二项式反演得 ∑ni=k(−1)i−k(ik)g(i)
在实际题目中,构造这样的 g 和 f 即可运用二项式反演解决问题。
练习题
[MtOI2018]情侣?给我烧了! - 洛谷
题解:LuoguP4921 情侣?给我烧了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】