Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/Main-Bold.js

二项式系数

本博客内容大部分来源于对《具体数学》第五章的整理,略去了其中有关超几何变换的部分。

需要掌握一些 的处理技巧,有限微积分和泰勒展开(泰勒展开只在证明用一点点,不会也没事)。

upd. 评论区有人指出上指标求和的组合意义错了,已订正。

为了有一定实力的同学可以略过基本恒等式,为了您的方便,我把出现的十个恒等式列出供您参考:

(nk)=nk_k!=n!k!(nk)!(1)(a+b)r=k(rk)akbrk(rN|ab|<1,rR)(4)(nk)=(nnk),nN,kZ  (5)(rk)=rk(r1k1),kZ,k0   (6)(rk)=(r1k)+(r1k1),kZ  (9)kn(r+kk)=(r+n+1n),nZ (10)0kn(km)=(n+1m+1),n,mN (11)(rk)=(1)k(kr1k),kZ   (13)(rm)(mk)=(rk)(rkmk),m,kZ (14)k(rk)(snk)=(r+sn),nZ(15)(nk)=nkk!=n!k!(nk)!(1)(a+b)r=k(rk)akbrk(rN|ab|<1,rR)(4)(nk)=(nnk),nN,kZ  (5)(rk)=rk(r1k1),kZ,k0   (6)(rk)=(r1k)+(r1k1),kZ  (9)kn(r+kk)=(r+n+1n),nZ (10)0kn(km)=(n+1m+1),n,mN (11)(rk)=(1)k(kr1k),kZ   (13)(rm)(mk)=(rk)(rkmk),m,kZ (14)k(rk)(snk)=(r+sn),nZ(15)

基本恒等式

(nk)(nk) 被称为二项式系数,其组合意义为从 nn 个数的集合中选取大小为 kk 的子集的方案数。显然通过定义,我们知道定义域为 n,kNn,kN,并能得到其定义式:

(nk)=nk_k!=n!k!(nk)!(nk)=nkk!=n!k!(nk)!(1)

nk_nk 意思是随便选取 kk 个元素,排除掉 k!k! 种重复的情况就是上式。除此之外,二项式系数之所以被称为二项式系数,是因为有二项式定理:

(a+b)n=nk=0(nk)akbnk(a+b)n=nk=0(nk)akbnk(2)

可以从组合意义给予证明,akbnkakbnk 产生这一项只能通过从 nn(a+b)(a+b) 中选取 kkaanknkbb 达到,而方案数是 (nk)(nk)。但我们不仅对正整数定义了指数,同时也对负整数,实数等定义了指数。当我们想展开这类的二项式时,现在的定义域就不够用了,我们需要把 n,kn,k 的取值范围拓展一下。事实上,拓展到 nR,kZnR,kZ 是有益的,即:

(rk)={rk_k!k00k<0(rk)=rkk!k00k<0(3)

其中为了表示上指标可以取任意实数,我们用 rr 而不是 nn 表示上指标(事实上也可以取复数,但本文不讨论,之后如无特殊说明实数成立的结论对复数都成立)。这里为了避免歧义,再给出底数为实数,指数为非负整数的下降幂定义:

rk_=r(r1)(r2)(rk+1)(kN,rR)rk=r(r1)(r2)(rk+1)(kN,rR)

显然,这种情况下,对于某些取值二项式定理就失去了组合意义,但收获了很大的数学意义。实践证明,后者的收获要远大于前者的损失。

介绍完二项式系数的基本定义后,我们先来对一个 单独的二项式系数 (rk)(rk) 做些观察。首先通过定义,我们能发现 (rk)(rk) 是关于 rrkk 次多项式,这能在估计复杂度,推导一些数学公式时用到。然后我们来看 (nn)(nZ)(nn)(nZ) 的值,看起来它总等于 11,但事实上,当 n<0n<0 时,根据定义我们有 (nn)=0(nn)=0。在观察更复杂的情况前,我们先来看看 r,kr,k 较小的情况:

n(n0)(n1)(n2)(n3)(n4)(n5)(n6)01000000111000002121000031331000414641005151010510616152015201n(n0)(n1)(n2)(n3)(n4)(n5)(n6)01000000111000002121000031331000414641005151010510616152015201

这就是大名鼎鼎的杨辉三角了,记住这些数列的特征可以当我们在实战中遇到类似的数列时往二项式系数方面考虑。除此之外,我们还可以观察到三个显然的恒等式:

(r0)=1,(r1)=r,(r2)=r(r1)2(r0)=1,(r1)=r,(r2)=r(r1)2

证明根据定义显然得证。除此之外,因为 nRnR,我们可以再观察一下当 n<0n<0 时表格的值:

n(n0)(n1)(n2)(n3)(n4)(n5)(n6)0100000011111111212345673136101521284141020355684

如果您从左上向右下看的话,是能够看到类似正数情况的杨辉三角的。具体为什么是这样,可以等到之后我们研究完更多二项式系数恒等式时再回来解释。

接下来让我们更靠近看一看 二项式定理 ,这个二项式系数名称的来源恒等式。上文在没有拓展上下指标定义域时,给出了它的比较狭义的式子 (2)

(a+b)n=nk=0(nk)akbnk(nN)

但注意到,当 ab=0a+b=0 时,会出现 f(x)=x0f(0) 处取什么值的问题。这里我们并不讨论具体细节,而是发现如果令 f(0)=1,则一些恒等式就能成立且是正确的。因为这些恒等式太重要了,所以我们就强制规定 f(x)=x0f(0) 的取值为 1。举个例子,比如令 a=1,b=1 我们就可以得到:

0n=nk=0(1)k(nk)=[n=0]

这意味着杨辉三角除了第一行外,其余所有行符号交错相加均能得到 0。除此之外,在 OI 中,我们还能用到以下的一些特殊情况:

  1. a=b=1,我们有:

    2n=nk=0(nk)

    可以把一堆二项式系数变为一项幂,也可以把一个幂变成一堆二项式系数。也可以用来估算时间复杂度。
  2. a=1,b=2,我们有:

    3n=nk=02k(nk)

    估计枚举子集的复杂度。

除此之外,在观察到形如一个 带上一个二项式系数再带上一个幂的形式,也可以往套二项式定理方面想,在推导到二项式无法继续进行时,也可以考虑二项式定理爆拆。

刚刚说了,给出的形式是比较狭义的,因为它只允许指数是自然数。而既然我们已经把上指标拓展到全体实数了,这里也理应有一个更广义的形式:

(a+b)r=k(rk)akbrk(rN|ab|<1,rR)

这里有一些需要注意的地方。首先这个和式是对所有整数 k 求和,但如果我们限制了 rN,那就只有满足 0krk 是非 0 的,是有限和式。而如果不限制 r 的取值,和式就是无限的了,则我们就要有 |ab|<1 来保证和式收敛。至于为什么是 |ab|<1 和广义二项式定理的证明,让我们考虑 b=1,aR 的情况,即:

(1+a)r=k(rk)ak,|a|<1

考虑记左边为 f(a)=(1+a)r,并把 f(a)0 处泰勒展开掉:

f(a)=f(0)0!a0+f(0)1!+f(0)2!a2+=k0f(k)(0)k!ak

注意到 f(a) 的导数比较好做,事实上,f(k)(a)=rk_(1+a)rk,因为每次求导都会给指数减去 1 并把指数乘下来。这样我们令 a=0 就得到了上式:

f(a)=k0rk_k!ak=k(rk)ak,|a|<1

而根据达朗贝尔审敛法,对于一个幂级数 f(x)=n0anxn 我们记

ρ=limn|an+1||an|

则收敛半径 R 为:

{1ρρR++ρ=0

而套用到我们的式子上,有:

ρ=limk|(rk+1)||(rk)|=limk|rk+1_(k+1)!||rk_k!|=limk|rkk+1|

注意到 r<k,所以可以去掉绝对值符号:

limk|rkk+1|=limkkrk+1=limkk+1r1k+1=1+limkr1k+1=1

这样我们得到,(1+a)r 的收敛半径 R=1。所以当 |a|<1 时原式收敛。

现在我们暂时告别二项式定理,来看看其他的关于二项式系数的恒等式。首先是著名的 对称性

(nk)=(nnk),nN,kZ

可以从组合意义来看,即选 k 个出来等于选 nk 个不出来。但要特别注意的是 n 的取值范围是 N 而不是 Z。(不可能是 R,因为在后面一项中它跑到了下指标)对于 n<0 的情况,大家可以自己举一些反例,这里不再赘述。从数学意义来看,当 k<0k>n 时两边均为 0。(如果 n<0 这个条件显然不成立)而当 k[0,n] 时,根据定义式我们有:

(nk)=n!k!(nk)!=n!(n(nk))!(nk)!=(nnk)

这个对称恒等式可以用来小范围改变下指标,凑一些形式。

然后是将一些东西移进或者移出二项式系数的 吸收恒等式

(rk)=rk(r1k1),kZ,k0

很好记,形式挺整齐。令 k0 是为了避免 0 作除数。当 k<0 时两边均为 0,否则可以从定义推出:

(rk)=rk_k!=rk(r1)k1_(k1)!=rk(r1k1)

此外,如果把两边同时乘 k,还能得到不限制 k0 的吸收恒等式:

k(rk)=r(r1k1),kZ

除此之外,这个恒等式还有另一种形式,它可以保证下指标不变:

(rk)(rk)=r(r1k),kZ

推导的话可以利用对称性:

(rk)(rk)=(rk)(rrk)(5)=r(r1rk1)(7)=r(r1k)(5)

这样就证完了……吗?并不,在应用 (5) 时,我们需要的前提是 rN+,但却没有在推导的条件中写明这一点,这是漏洞吗?不,我们需要对此作一番陈述。注意到两边均为关于 rk+1 次多项式,而一个 d 次多项式至多有 d 个零点,(对于 d 次多项式函数 f(x),其可以表示为 f(x)=kdi=1(x+ai),k0 的形式,当 ai 两两不同时有最多的零点)所以两个 d 次多项式相减也至多有 d 个零点, 或有无穷多个零点,此时相减出来的多项式为常数多项式 f(x)=0,即两个多项式完全相等。而刚刚,我们证明了上述式子在 rN+ 时成立,所以已经有了无穷多个零点,这样等式左右两边就一定完全相等了。这种推理方法被称为 多项式推理 法,其对于将两边均为多项式的等式从整数推向实数时非常好用。但注意像 (5) 那样两边就不是多项式的等式就不能用了。

我们再来练习一下多项式推理法,就以这个最重要的恒等式之一 加法公式 为例吧:

(rk)=(r1k)+(r1k1),kZ

从 OI 来讲,它最大的用处之一就是帮助我们 O(nk) 递推组合数。而我们现在要从数学意义更进一步观察这个式子。就从证明开始吧,我们考虑先假设 rN+ 利用组合意义证明,再通过多项式推理法对 rR 证明。对于 rN+,我们可以把 (rk) 理解为从 r 个球中选出 k 个的方案数,而假设这 r 个球中恰包含一个红球其余均为白球。则全选白色的方案数为 (r1k),选到红色的方案数为 (r1k1),两项加起来就是随便选的方案数 (rk)。而由于 (9) 中两边相减为关于 rk 次多项式,所以通过多项式推理法,我们得到其对于 rR 均成立。

除此之外,我们还可以应用刚刚看到的恒等式 (7),(8) 证明,两式相加有:

(rk)(rk)+k(rk)=r(r1k)+r(r1k1)

左边就是 r(rk),这样等式两边同时除以 r 就得到了 (9)。当然这种推理对 r=0 时不成立,简单代入验证一下就好。顺带一提,我们还能用定义来证明 (9),大家可以自己试试。这些证明虽然截然不同,但本质是相同的,因为不同恒等式之间可以相互推导。

加法公式非常有用,可以以它为起点我们可以归纳出许多其他的恒等式。考虑把反复展开具有最小下指标的项:

(53)=(43)+(42)=(43)+(32)+(31)=(43)+(32)+(21)+(20)=(43)+(32)+(21)+(10)+(11)

好了,现在 (11) 没了,推导到此停止。通过归纳,我们可以证明以下的一般公式,称为 平行求和法

kn(r+kk)=(r+n+1n),nZ

注意这里并不限制 k 的下限,因为所有 k<0 对应的项均为 0。除此之外,我们通过反复展开具有最大指标的项,(留给读者自行展开)可以归纳证明:

0kn(km)=(n+1m+1),n,mN

这一恒等式被称为 上指标求和。这一恒等式中需要限制 k 的下限 0,因为 k<0 的项并不为 0。这一恒等式有组合意义,表示从编号为 0n 的球中选出 m+1 个,则选出的球编号最大为 k 时方案数有 (km) 种。

对于上述两个恒等式,我们不仅能通过归纳法证明,还可以相互证明,具体来讲有:

kn(m+kk)=mkn(m+kk)k<00=mkn(m+km)(5)=0km+n(km)km+k=(m+n+1m+1)(11)=(m+n+1n)(5)

这样我们就通过 (11) 证明出了 (10)。而通过 (10) 证明 (11) 思路是类似的,都是通过整理和式来满足形式,留作练习。这里需要特别强调的一点是为什么在第一步非得限制一下 k 的下限,这是因为如果我们要在第二步应用 (5) 就得保证 m+k0

刚刚我们给出了上指标求和的公式,联想有限微积分,这又是一个比较整齐的和式,有没有可能通过有限微积分来找到封闭形式呢?那我们要考虑找到 (km) 的差分,即:

Δ((km))=(k+1m)(km)=(km1)(5)

这样,应用有限微积分的技术,我们能得到:

(km)δk=(km+1)+C

我们看了很多二项式的恒等式了,是时候回过头研究一下当上指标是负整数时二项式系数的取值了。回忆上文所画的表格,我们可以发现负数和正数对应的表格都有杨辉三角的形式,只不过方向不一样。所以上指标为正数时和负数时一定有些转化关系,事实上,我们有:

(rk)=(1)k(kr1k),kZ

证明非常简单。当 k0 时,我们有 上指标反转 的公式:

rk_=r(r1)(r2)(rk+1)=(1)k(r)(1r)(2r)(kr1)=(1)k(kr1)k_

两边同时乘 k! 即得 (13)k<0 时两边均为 0。上指标反转非常重要,它可以推导出许多其他的恒等式且不需要附加额外条件。

比如根据:

(n+mn)=(1)n(m1n)(n+mm)=(1)m(n1m),n,mN

我们有:

(1)n(m1n)=(1)m(n1m),n,mN

这能让我们在上下指标位置之间移动量。

除此之外,我们还能找到在杨辉三角的每一行中的一部分交错符号相加的结果:

km(1)k(rk)=km(kr1k)(13)=(r+mn)(10)=(1)m(r1m)(13)

现在我们大多处理的是关于二项式系数的和式,如果出现乘积呢?这里有一个 三项式版恒等式

(rm)(mk)=(rk)(rkmk),m,kZ

k=1 时,(14)(7) 其实是相同的。证明我们依然可以采用先对 rmk0 的特殊情况证明,然后用多项式推理法推到 R。根据定义展开,我们有:

(rm)(mk)=r!m!(rm)!m!k!(mk)!=r!k!(rm)!(mk)!=r!k!(rk)!(rk)!(rm)!(mk)!=(rk)(rkmk)

k,m<0 时,(14) 的两边均为 0。所以这个等式对于 k,mZ,rN 成立了,而因为两边均为关于 rm 次多项式,所以通过多项式推理法,它对 rR 也成立。通常来讲,这个等式两边总会有一边更容易计算。比如如果我们是关于 m 求和,可能就更想要右边的式子而不是左边的,因为右式仅有一个 m

接下来来点更恐怖的,也是本文介绍的最后一个恒等式,是关于求和和乘积结合的范德蒙德卷积:

k(rk)(snk)=(r+sn),nZ

说它是卷积是因为它的下指标有卷积的形式,可以利用这点方便记忆。证明依然是老套路,我们假设 r,sN,则该式具有组合意义。(r+sn) 表示从 r 个红球 s 个白球拿出 n 个球的方案数。而 k(rk)(snk) 表示拿出 k 个红球,nk 个白球的方案数,对 k 求和就得到所有的方案数。那因为两边均为关于 r,sn 次多项式,多项式推理法告诉我们 r,sR 的情况也成立。

范德蒙德卷积的用处在于可以通过前面的恒等式稍作变化,简化一些(或者让它们暂时变复杂)一些和式加乘积的形式。举个例子,证明:

k(lm+k)(sn+k)=(l+slm+n),lN,m,nZ

看起来有范德蒙德卷积的形式,但还不太像,因为多了一个字母 m。不过没关系,我们用 k 代替 k+mn 代替 nm,立马可以得到:

k(lk)(sn+k)=(l+sl+n)

还是不太像,下指标之和不是定值。不过没有关系,我们对 (lk) 运用 (5) 对称性:

k(llk)(sn+k)=(l+sl+n)

搞定,这就是范德蒙德卷积的形式了。不过从上面的推导我们可以看出,有时给范德蒙德卷积多一个变量是有益的,这样不用因为要给推导的恒等式少一个变量头疼了。具体来讲,我们设 mZ,则用 k+m 代替 k 可以得到:

k(rk+m)(snmk)=(r+sn)

n 代替 nm 可以得到更好看的式子:

k(rk+m)(snk)=(r+sn+m)

这样我们在推导上面那个恒等式时,直接对 (lm+k) 用对称性,套 (16) 就可以证明了。

注意 (16)(17) 的相似性和区别性。相似的是,它们均由两个二项式系数相乘带上一个和式得到,且两个二项式系数下指标中均有求和指标。不同的是,它们下指标中求和指标的符号不同。这提示我们遇到类似范德蒙德卷积的式子时根据求和指标的位置和符号选择合适的恒等式,这里给出由范德蒙德卷积导出的 4 个恒等式,注意观察求和指标的位置和符号:

k(lm+k)(sn+k)=(l+slm+n),lN,m,nZ(16)k(lm+k)(s+kn)(1)k=(1)l+m(smnl),lN,n,mZ(18)kl(lkm)(skn)(1)k=(1)l+m(sm1lmn),l,m,nN (19)qkl(lkm)(q+kn)=(l+q+1m+n+1),n,m,l+qN(20)

如果记不住也可以寄希望于人类智慧,用的时候通过对称性,反转上指标之类的由范德蒙德卷积推导。

这就是《具体数学》上给出的最重要的十个二项式系数恒等式的介绍了,接下来我们来看点练习。

练习和技巧

我们先来看一些利用前面恒等式的练习题,然后会有三个技巧。

第一道练习

化简:

nk=0k(mk1mn1)(mn),m,nN,m>n

这看起来非常恐怖,首先我们就可以注意到,分母里不含任何求和指标,所以可以把它直接移出和式,现在我们要化简的和式为:

nk=0k(mk1mn1)

但看起来还是很棘手。不过观察到 k 只在上指标中出现了,如果没有多出来的 k,我们可以改变一下求和指标的意义后用上指标求和 (11)。而面对这个多出来的 k,我们可以考虑用吸收恒等式那一套把 k 给吸收进去。但很遗憾,看完所有的吸收恒等式后,会发现没有一个能用的。但是,如果我们用 mk 代替 k,就能用恒等式 (7) 得到:

(mk)(mk1mn1)=(mn)(mkmn)

这样 k 就只在二项式系数中出现了。在原式中,我们可以把 k 改写为 m(mk) 从而避免烦人的指标变换:

nk=0k(mk1mn1)=nk=0m(mk1mn1)nk=0(mk)(mk1mn1)=mmk=0(mk1mn1)(mn)nk=0(mkmn)

接下来就简单了,化简两个和式里面的内容就好。我们先看看起来比较简单的 nk=0(mkmn),只需让 k 代替 mk,有:

nk=0(mkmn)=mk=mn(kmn)=mk=0(kmn)=(m+1mn+1)(11)

另一个很类似,只需用 m 代替 m+1 就好,所以原式又等于:

m(mmn)(mn)(m+1mn+1)

因为 (m+1mn+1)=(m+1)!(mn+1)!n!=m+1mn+1m!n!(mn)!=(mmn),所以有:

m(mmn)(mn)(m+1mn+1)=(m(mn)m+1mn+1)(mmn)=nmn+1(mmn)

带回原式有:

nk=0k(mk1mn1)(mn)=nmn+1(mmn)(mn)=nmn+1

第二道练习

定义:

Qn=k2n(2nkk)(1)k,nN

Q106 的值。
看起来非常棘手,想开始写代码求解的同学先坐下,我们数学推导完就可以 O(1) 求解了。好吧,看起来这题没什么思路,您可以试一下上述所有的恒等式,在这里面都不会化简太多。当我们没思路的时候,可以考虑观察一下小数据,事实上,通过手玩我们有:

Q0=1,Q1=0,Q2=1,Q3=0,

看起来非常有规律,但也仅仅停留在非常有规律,我们还是什么都不知道。事实上,我们想找到一个递归式,但这就需要把 Qn 和比较近的项关联,但 Qn,Qn1 中的二项式系数上指标相差是指数级别的,我们根本不可能用像加法公式这样的恒等式计算。一个 Key Observation 是,n 出现的情况均为 2n,所以可以考虑换元。令 m=2n 有:

Rm=km(mkk)(1)k

我们有 Qn=R2n,所以当我们对 R 找到封闭形式时,Q 也能找到。而 R 中的二项式系数更加友好了,我们可以尝试使用加法公式找到递归式:

Rm=km(mkk)(1)k=km(mk1k)(1)k+km(mk1k1)(1)k=km(mk1k)(1)k+km1(m2kk)(1)k+1=(km1(m1kk)(1)k+(1m)(1)m)+(1)(km2(m2kk)(1)k+(1m1)(1)m1)=Rm1+(1)2mRm2(1)(2(m1))=Rm1Rm2

这里的推导有几个需要注意的地方。首先倒数第二步我们用了 (1m)=(1)m 的结论,事实上,它可以由上指标反转 (13) 这样推出:

(1m)=(1)m(m(1)1m)=(1)m

注意到我们这里能说 (mm)=1 是因为 m0。然后是这个推导的思路,我们通过加法公式将 Rm 变成了好几项,并尝试凑出 R 的格式,这类似于处理和式时的扰动法。这样,只要 m3,我们就有:

Rm=Rm1Rm2=(Rm2Rm3)Rm2=Rm3

这样,只要 m6,就有 Rm=Rm6。所以 R 是以 6 为循环节循环的。可以根据上述递推式快速求出 m=05Rm 的值,从而得出总的封闭形式:

Rm={110110mmod6={012345

最后,我们从 R 的封闭形式尝试找到 Q 的封闭形式。也就是找到 2nmod6 的规律。事实上,它是这样的序列:1,2,4,2,4,2,4。所以 Q 的封闭形式为:

Qn={1n=00n1(mod2)1otherwise

回到最初的问题,显然我们有 Q106=1

第三道练习题

化简:

k(nk)(sk)k,nN

还记得刚刚证明过的恒等式 (16) 吗?注意到这个式子下指标里都有求和指标 k 且符号相同,可以尝试往那个方面套。显然我们的最大阻碍还是游离的 k,依然考虑吸收恒等式 (7)

k(nk)(sk)k=sk(nk)(s1k1)

这样就可以用恒等式 (16) 并直接得出答案了:

sk(nk)(s1k1)=s(n+s1n1)

当然,这道题的想法都是比较直接的,为什么我要把它拿出来说呢?注意到其实我们第一步选择吸收恒等式的时候有两种选择,可以把 k(sk) 当做一个整体,可以把 k(nk) 当做一个整体,但我们却选择了前者。是等价的吗?不,我们只能选择前者。因为如果选择后者,我们会得到:

nk(sk)(n1k1)

而注意到 s 是没有取值限制的,n1 是可能取负数的。但 (16) 要求上指标至少一个是非负数,所以就无法套用了。这个式子提醒我们在套用恒等式时注意取值范围。

一些技巧

《具体数学》上还有 3 道练习,大家如果觉得刚刚三题不够的话可以再去练一练。我们接下来要进入处理技巧了。

首先是形如 (n12k),n,kZ 的式子,它可以被转化为两个二项式系数相乘的形式,从而推导出一类新的恒等式。首先,我们有 加倍公式

rk_(r12)k_=(2r)2k_22k,kN

证明比较显然,将左边的式子展开就好:

r(r12)(r1)(r32)(rk+1)(rk+12)=(2r)(2r1)(2r2k+1)2k

现在我们在加倍公式的两边同时除以 (k!)2,则有:

(rk)(r12k)=(2r2k)(2kk)22k,kN

其中可能引起迷惑的是 (2r)2k_(k!)2=(2r2k)(2kk) 这一步。事实上,它不过是在分子分母同时乘上 (2k)k_ 得到的结果。言归正传,如果我们令 k=r=n,nN,则有:

(n12n)=(2nn)22n

突然发现好像卡特兰数,有没有人出道题 而如果我们对左边反转上指标,有:

(n(n12)1n)(1)n=122n(2nn)(12n)=(14)n(2nn),nN

除此之外,如果我们根据范德蒙德卷积 (15),则有:

k(12k)(12nk)=(1n)=(1)n,nN

代入 (22) 有:

(12k)(12nk)=(14)k(2kk)(14)nk(2(nk)nk)

代回,有:

k(2kk)(2n2knk)(14)n=(1)n

即:

k(2kk)(2n2knk)=4n,nN

通过上面对加倍公式的相关阐释,我们得到的技巧是,面对形如 (2kk) 的二项式系数时,可以考虑转化为 (n12k) 的形式,其中 n 是某个适当的整数(如 0,1,k 等),这样再根据上面的恒等式或其他恒等式化简就会简单得多。

技巧二是是利用高阶差分,也就是研究有限微积分中定义的算子 Δ 和二项式系数之间的关系。我们定义函数 fx 点的差分 Δf 为:

Δf(x)=f(x+1)f(x)

既然要研究高阶差分,我们就先来研究研究小数据。再次利用差分,我们可以得到二阶差分:

Δ2f(x)=f(x+2)2f(x+1)+f(x)

好像有点杨辉三角的影子?我们再尝试再多用几次差分:

Δ3f(x)=f(x+3)3f(x+2)+3f(x+1)f(x)Δ4f(x)=f(x+4)4f(x+3)+6f(x+2)4f(x+1)+f(x)

现在我们完全看到杨辉三角的样子了,我们可以猜测结论:

Δnf(x)=k(nk)(1)nkf(x+k)

通过归纳,我们可以很方便的证明。但我们还有更简单的方法。我们定义平移算子 E 为:

Ef(x)=f(x+1)

定义恒等算子 1 为:

1f(x)=f(x)

则显然有:Δ=E1,则有:

Δn=(E1)n=k(nk)Ek(1)nk

由于 Ekf(x)=f(x+k),所以上式等价于 (23)

我们来考虑负的下降幂,情况十分有趣,我们设 f(x)=(x1)1=1x,则根据有限微积分的结论:

Δ(xm_)=mxm1_

有:

Δn((x1)1_)=(1)n_(x1)n1_=(1)nn!x¯n+1

如果代入 (23) 中,我们有:

k(nk)(1)kx+k=n!x¯n+1=1x(x+nn),x{x|nx0,xZ}

上面所有的等式如果变换不理解的话,均可以通过展开上升幂或者下降幂的方法证明。这样我们得到了一个关于二项式系数带分母交错求和的恒等式。

除此之外,我们还能研究正的下降幂,显然 xd_(d>0) 是关于 xd 次不等式。则如果设 f(x)=xd_Δdf(x) 就为一个常数,而当 n>d 时,Δnf(x)=0。事实上,上面的描述对所有 d 次多项式均适用。这个结论在推导时可以帮助简化公式。

然后我们还能通过下降幂和通常幂的关系来找到一些关系(事实上,见到二项式系数和普通幂掺和到一起时,就要考虑转下降幂了,因为二项式系数和下降幂很搭,详见:P6620 [省选联考 2020 A 卷] 组合数问题),我们设

f(x)=0kdakxk

是一个 d 次多项式,则根据:

xn=k{nk}xk_

所以如果我们设 bk=j{kj},则 f(x) 还可以被表示为:

f(x)=0kdbkxk_

更进一步,如果我们设 ck=k!bk,则 f(x) 又等于:

f(x)=0kdck(xk)

从而,我们能把任意多项式表示为二项式系数的倍数之和,这种展开被称为 牛顿级数。根据加法公式 (5),我们有:

Δ((xk))=(xk1)

则容易得到:

Δnf(x)=0kdck(xkn)

如果我们令 x=0,则除了 k=n 的那一项外,其余均为 0,即:

Δnf(0)={cnnd0n>d

所以我们就有多项式 f(x) 牛顿级数的另一种形式:

f(x)=0kdΔkf(0)(xk)

如果代入 (23),我们还能得到另一种推导形式:

f(x)=0kd(nk)(1)kf(k)=(1)ncn,nN

从而,我们可以证明:

f(x)=0kd(nk)(1)k(a0+a1k++ankn)=(1)nn!an,nN (26)

它成立是因为多项式 a0+a1k++ankn 能被牛顿级数 c0(k0)+c1(k1)++cn(kn) 表示,其中 cn=n!bn=n!an

说了这么多,高阶差分到底有啥用呢,它可以用来化简一些无从下手的式子,比如这个:

k(nk)(rskn)(1)k,nN

看起来很无从下手,但我们发现一个非常关键的地方,这里有 k(nk)(1)k 的形式,而如果我们设 f(k)=(rskn),则会有:

f(k)=(rskn)=1n!(1)nsnkn+=(1)nsn(kn)+

这个可以把二项式系数通过下降幂的形式展开,然后观察怎么得到 kn 项来找到 n 次项的系数。如果我们把它换成牛顿级数的形式,因为 cn=n!bn=n!an,所以有 (1)nsn(kn)。然后不管是根据第一种形式套 (26) 还是第二种形式套 (25),结果都是一样的,均为:

k(nk)(rskn)(1)k=sn,nN

《具体数学》上之后对于高阶差分还有跟泰勒级数比较的讨论,但本文不再涉及。我们直接进入下一个技巧,二项式反演(本文这一部分会把重点放在 OI 相关)。那我们就先从人尽皆知的式子和证明开始吧。首先我们有基本式子:

fn=ni=0(ni)gign=ni=0(ni)fi(1)ni,nN

这个公式可以完成从“至多”到“恰好”的转换( fn 表示“至多”,gn 表示“恰好”。)

fk=ni=k(ik)gigk=ni=k(ik)fi(1)ik,nN

这个公式可以完成从“至少”到“恰好”的转换( fn 表示“至少”, gn 表示“恰好”。 )

给出代数证明:(或者可以直接套牛顿级数的公式)

gn=ni=0(ni)fi(1)ni=ni=0(1)ni(ni)ij=0(ij)gj fn =nj=0gjni=j(1)ni(ni)(ij)=nj=0gjni=j(1)ni(nj)(njij) (14)=nj=0gj(1+(1))nj(nj) (2)=nj=0gj(nj)[n=j] n=j  (1+(1))nj=1=gn n=j  (nn)=1

另一种公式证明类似。

来看一个实际问题,设一个排列 P=1,2,,n,将 P 任意重排。设 fn,k 表示长为 n 的排列重排后恰有 k 个元素满足 Pi=i 的方案数。我们来研究一下这个 fn,k。首先根据 OI 的做题经验,我们很容易想到把恰好给干掉,考虑设 gn,k 表示至少有 k 个元素满足 Pi=i 的方案数。显然我们有 gn,k=(nk)(nk)! 即选 k 个元素满足该条件,剩下的随便。则根据二项式反演,我们有:

fn,k=ni=k(ik)gn,i(1)ik=ni=k(ik)(ni)(ni)!(1)ik

利用三项式版恒等式,可以简化为:

ni=k(nk)(nkik)(ni)!(1)ik=(nk)ni=k(nkik)(ni)!(1)ik

这样,就可以做到 O(n) 计算了。其中后面那一坨 ni=k(nkik)(ni)!(1)ik 其实就是 nk 个元素的错排数。因为这个式子还有一种理解方式是,我钦定 k 个满足 Pi=i,其余均不满足,那方案数自然就是 nk 的错排。

再来看道例题吧:

P4859 已经没有什么好害怕的了

给出长度为 n 的两个集合 A={ai}B={bi} ,将它们两两配对,求在所有可能中,满足存在 p(ai,bi) 使得 bi<ai ,存在 q(ai,bi) 使得 bi>aipq=k 的情况个数,对 109+9取模( 1n2000,0kn )。

对于这种直接求不好求的题目,我们的方法还是像刚刚的例子一样,先钦定一个东西,再二项式反演搞一下。这题我们可以令 gi 表示钦定 i 对满足 ai>bi 的情况,fi 表示恰好存在 i 对满足 ai>bi 的情况。可以看出 gi 表示“至少”有 i 个,fi 表示“恰好”有 i 个,它们之间可以用二项式反演建立桥梁,而最终答案应该为 fn+k2

接下来的问题就转移到求 gi 上了。观察到 n 的范围较小,可以考虑二维dp。我们设 dpi,j 表示已经看到了 A 的前 i 位,已经钦定了 j 个,且 A[1,i] 位都已经与 B 中不同的数配对。为了方便转移,我们先把 A,B 排序,则状态转移方程易得: dpi,j=dpi1,j+dpi1,j1×(cntj+1),其中 cnt 表示 B 中比 ai 小的数有 cnt 个,因为数组有序,所以可以通过一个指针维护当前比第一个大于等于 ai 的,指针一定单调增长且最多 增长 n 次,这样可以做到均摊 O(1) 求出 cnt。 这个转移方程方程的意思为如果此次不为 ai 钦定一个 bi,则从 dpi1,j 直接转移;如果钦定,则从 dpi1,j1 转移,方案数为总共可选的 cnt 减去已经选过的 j1 个值。

求出 dp 后,gi 就可求了,即 gi=dpn,i×(ni)!,因为钦定了 i 个,剩余的 (ni) 个就可以随便选取了。接下来根据二项式反演的套路,把“至少”转化为“恰好”。gk=ni=k(ik)fifk=ni=k(ik)gi(1)ik

利用箭头右边的等式计算即可,组合数可以直接递推,复杂度 O(n2),足以通过本题。

最后一道例题:

P6478 [NOI Online #2 提高组] 游戏

小 A 和小 B 在玩一个游戏:有一颗包含 n=2m 个点的有根树,根为 1 ,初始时二人各有 m 个点。每回合二人需要选出一个自己拥有且之前未被选过的点,若对手的点在自己点的子树内则自己获胜,若自己的点在对方的点的子树内则自己失败;其他情况视为平局。游戏共 m 回合。 现在询问在二人随机选点的情况下,对于 k=0,1,2,,m ,计算出非平局回合为 k 的情况数。两种情况不同当且仅当存在一个小 A 拥有的点 x 。小 B 在 x 被小 A 选择的那个回合所选的点不同,情况数对 998244353 取模( n5000 )。

考虑转化,设 gi 表示钦定选了 i 对有祖先关系的方案数, fi 表示恰好存在 i 对有祖先关系的答案。可以发现 gi 为“至少”,fi 为恰好,可以通过二项式反演来建立桥梁,最终答案即为 f0,f1,f2,,fm

问题落在了求 gi 上。观察到 n 的范围不大,考虑二维树上dp。设 dpi,j 表示在以 i 为根的子树中,钦定了 j 对有祖先关系的点对的方案数。易得状态转移方程: dpi,j+k=dpi,j+ssonidps,k(不配对) dpi,j+k+1=[ai=0](dpi,j+ssonidps,k[as=1])01 配对)

dpi,j+k+1=[ai=1](dpi,j+ssonidps,k[as=0])10 配对)

可以通过恰当的安排循环条件将复杂度从 O(n3) 降至 O(n2)

最后总结和闲话

那本文到此所有的知识点就都讲解完毕了~,写了 2.5w 字,总时长三天,还是很希望能让大家(当然还有我自己)学到新东西的。本文主要介绍了二项式恒等式及其简单练习,和与二项式相关的三个技巧。其中二项式反演的技巧跟书上差别蛮大,大家有兴趣可以去《具体数学》上看看他是怎么讲解的。

总之,二项式系数的东西不可能一篇文章全部写完,我已经尽量挑最基本的说了。而且这玩意没有题单之类的,有的就是平常在推式子时积累的经验,所以大家可以找来《具体数学》的练习题做,或者去做点难的计数题,慢慢就熟能生巧了,祝您早日成为数数大师!

posted @   zhiyangfan  阅读(2372)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示