杂谈:二项式反演与多步容斥

这是两个本质不同的东西。

多步容斥是“至少或至多选若干个”到“恰好选若干个”的变换。而二项式反演是“钦定选若干个”到“恰好选若干个”的变换。二项式反演虽然形式上和多步容斥极为相似,但它们并不等价,只是习惯上很多人把他们都称之为多步容斥。

在二项式反演的组合意义上,记 f(n) 表示 “钦定选 n 个”,g(n) 表示 “恰好选 n 个”,则对于任意的 ing(i)f(n) 中被计算了 (in) 次,故有

f(n)=i=nm(in)g(i)

其中 m 是数目上界。

十分值得注意的是,在定义中,f(n) 表示先钦定 n 个,再统计钦定情况如此的方案数,其中会包含重复的方案,因为一个方案可以有多种钦定情况。具体地,对于恰好选择 i 个,钦定情况数为 (in),故 g(i)f(n) 中被计算了 (in) 次。切勿将 f(n) 理解为普通的后缀和。

举个例子,错排数 Dn 的一个公式是

Dn=k=0n(1)k(nk)(nk)!

这个公式是对的,然而从容斥的角度看毫无疑问是似是而非的。如果把 (1)k 理解为容斥系数,这个式子的意思似乎是先选定至少 k 个位置使得 ai=i,剩下的随意排,也就是至少 k 个位置不错位的方案数,但仔细想想并不是这样的。

考虑 n=3,k=1 时公式给出方案数为 6,而实际上只有下面四种方案:

123,132,321,213

这是因为 123 被计算了 3 次,毫无疑问这里从容斥原理的角度看是算重复了。但是重二项式反演的角度看则刚刚好:设 fi 表示恰好有 iak=k 的排列数,gi 表示钦定有 iak=k 的排列数,那么

gi=ji(ji)fj

二项式反演得到

fi=ji(1)ji(ji)gj

我们要求的就是 f0

posted @   方而静  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示