更好的阅读体验
从《具体数学》第五章 二项式系数中选了一些个人认为比较 useful 的内容,添加了部分解释和证明。
组合数
在 n 个元素中选择 m 个的方案数,记作 (nm),定义为:
(nm)=n!m!(n−m)!
其中 n,m 为非负整数。
当 m 为非负整数时,可以拓展定义:
(nm)=nm––m!
其中 n 为任意实数甚至复数。
事实上甚至可以拓展到 m 为复数:
1z!=limn→∞n+znn−z
当 z 为负整数时 1z!=0,故认为 m 为负整数时 (nm)=0。
基本恒等式
下面基本只讨论 m 为整数的情况。
对称恒等式:(nm)=(nn−m),其中 n≥0。
吸收/释放恒等式:nm=nm(n−1m−1)。
加法公式:(nm)=(n−1m)+(n−1m−1)。
平行求和:m∑k=0(n+kk)=(n+m+1n),n 为非负整数。
上指标求和:n∑k=0(km)=(n+1m+1),n 为非负整数。
这个式子两边乘上 m 就可以得到有限积分的结果。
二项式定理:(1+x)r=∑k≥0(nk)xkyn−k,当 n 不为非负整数时需要 |x|≤1 来保证收敛。
上指标反转:(nm)=(−1)m(n−m−1m)。
范德蒙德卷积:n∑k=0(ak)(bn−k)=(a+bn),n 为非负整数。
组合证明:左边 a 个球,右边 b 个球,一共选 n 个球,相当于枚举左边选 i 个球,右边选 n−i 个球。
代数证明:
LHS=n∑i=0([xi](1+x)a)([xn−i](1+x)b)=[xn](1+x)a+b=(a+bn)
反范德蒙德卷积:n∑k=0(ka)(n−kb)=(n+1a+b+1),n 为非负整数。
组合证明:共 n+1 个球排成一列,选出 a+b+1 个球,相当于枚举第 a+1 个球在 i+1 处。
代数证明:
LHS=n∑i=0([xi](xa(1−x)a+1))([xn−i](xb(1−x)b+1))=[xn](xa+b(1−x)a+b+2)=(n+1a+b+1)
一半组合数
下降幂加倍公式:
xk––(x−12)k––=(2x)2k–––22k(x≥k)
(x−1/2k)=1k!(x−1/2)k––=(2x)2k–––k!xk––22k=4−k(2x2k)(2kk)/(xk)
Example 1
当 x=k=n 时有 (n−1/2n)=4−n(2nn)。
用上指标反转可推出 (−1/2n)=(−4)−n(2nn),故有:
∑(2ii)xi=(1−4x)−1/2
还可以算 (1/2k)=1/2k(−1/2k−1)=12k(−4)k−1(2(k−1)k−1),于是:
C(x)=1−(1−4x)1/22x=∑i[(2ii)/(i+1)]xi
即卡特兰数的生成函数。
Example 2
在
(x−1/2k)(xk)=4−k(2x2k)(2kk)
中令 x=n/2 得到:
((n−1)/2k)(n/2k)=4−k(n2k)(2kk)
∑k4−k(n2k)(2kk)=∑k((n−1)/2k)(n/2k)
然后 (n−1)/2 与 n/2 中至少有一个是非负整数。以 n/2 为非负整数为例:
∑k((n−1)/2k)(n/2k)=∑k((n−1)/2k)(n/2n/2−k)=(n−1/2n/2)
最后将两种情况合起来可以得到:
∑k4−k(n2k)(2kk)=(n−1/2⌊n/2⌋)
Example 3
还可以得到一些别的东西。已经得到:
(−1/2n)=(−4)−n(2nn)
对其求和有:
∑k(−1/2k)(−1/2n−k)=∑k(−4)−k(2kk)(−4)−(n−k)(2(n−k)n−k)=(−4)−n∑k(2kk)(2(n−k)n−k)
而左式用范德蒙德卷积就是 (−1n)=(−1)n。于是:
∑k(2kk)(2(n−k)n−k)=4n
差分和牛顿级数
这里涉及到有限微积分。考虑函数将序列放在值上的函数 f(x),关心其在整数上的取值。
定义平移算子 Ef(x)=f(x+1),差分算子 Δf(x)=f(x+1)−f(x),那么有 Δ=E−1,及:
Δn=∑k(nk)(−1)n−kEk
Δnf(x)=∑k(nk)(−1)n−kf(x+k)
Example
有限微积分中有结果 Δxk––=kxk−1–––––。
令 f(x)=(x−1)−1=1x,则:
Δnf(x)=(−1)(−2)⋯(−n)(x−1)−n−1=(−1)nn!x(x+1)⋯(x+n)=(−1)nx−1(x+nn)−1
于是:
∑k(nk)(−1)kx+k=x−1(x+nn)−1
于是获得了右式的部分分式展开,不过其实直接设元解也能快速得到。
牛顿级数
考虑 n 次多项式 f(x)=n∑k=0akxk。将其转为下降幂多项式后再给 xk 系数乘上 k!,可以得到:
f(x)=n∑k=0ck(xk)
所以任意多项式都可以唯一地表示成牛顿级数形式。
由于 Δ(xk)=(x+1k)−(xk)=(xk−1),故牛顿级数的导数很简单:
Δmf(x)=n∑k=0ck(xk−m)
令 x=0,则 Δmf(0)=cm。
Example 1
代入得:
f(x)=n∑k=0Δkf(0)(xk)
于是若知道 f(0),f(1),⋯,f(n) 就可以 O(n2) 得到 f(n) 的牛顿级数形式,这即牛顿插值。
该式进一步还可以写成:
f(a+x)=∑k≥0Δkf(a)k!xk––
可以看作有限微积分中的泰勒展开。
Example 2
还有另一个结果。将其代入 Δnf(x)=∑k(nk)(−1)n−kf(x+k) 可得:
∑k(−1)k(nk)f(k)=(−1)ncn
再把 f(n) 写回一般多项式 ∑kak,那么有 an=n!cn,故:
∑k(−1)k(nk)f(k)=(−1)nn!an
不过这个结果并不特别,其实就是下降幂多项式插求值的其中一个式子而已。
这给出一个启示:如果和式中出现 (−1)k(nk) 并且剩下的是一个 n 次多项式,就可以直接化简。
广义二项级数与 Raney 引理
组合角度
该部分内容来自 7.5 卷积。
考虑这样一个问题:
求有多少个长为 2n 的序列 a1,⋯,a2n∈{−1,1} 满足 ∑ai=0,使得所有前缀和非负。
答案显然就是卡特兰数 Cn=(2nn)/(n+1)。求法五花八门(比如经典折线翻转双射),这里有一种新的解释:
Raney 引理:若序列 a1,⋯,an∈Z 满足 ∑ai=1,那么其 n 个循环移位产生的序列中有且仅有一个满足所有前缀和为正。
证明:设前缀和为 sk,设 x 为满足 sk=mintst 的最大的 k,则显然以 x 开头的循环移位序列合法。考虑以 y(y≠x) 开头的循环移位序列:
- 若 y<x,则 sy≥sx,不合法。
- 若 y>x,则 sy>sx,即 sy≥sx+1=sx+n,不合法。
那么考虑补上 a0=1,限制就变成每个前缀和为正。由 Raney 引理就有:
Cn=12n+1(2n+1n)=1n+1(2nn)
此外,考虑最后一个 sx=1 且 x<2n 的 x,那么 [0,x] 与 [x+1,n−1] 均为合法序列,故卡特兰数的生成函数满足:
C(x)=xC2(x)+1
事实上这个东西可以拓展,比如考虑:
求有多少个长为 mn 的序列 a1,⋯,anm∈{1−m,1} 满足 ∑ai=0,使得所有前缀和非负。
可以算出共 n 个 (1−m) 和 mn−n 个 1。
同样设 a0=1,再用 Raney 引理得到:
C(m)n=1mn+1(mn+1n)=1mn−n+1(mnn)
这个数列的名字叫 富斯-卡特兰数。
设 bt 为最大的 k 使得 sk=t 且 k<mn(认为 b0=−1),那么 [bt+1,bt+1](0≤t<m) 都是合法序列。于是其生成函数 F(x) 满足:
F(x)=xFm(x)+1
这是一个很厉害的东西,因为直接从这个方程很难得到封闭形式。
下面来考虑 [xn]Fd(x)。显然没法直接求,但这里有个巧妙的双射,其与下面这个问题的答案是一样的:
求有多少个长为 mn 的序列 a1,⋯,anm+d−1∈{1−m,1} 满足 ∑ak=d−1(d>0),使得所有前缀和非负。
还是令 a0=1,设 bt 为最大的 k 使得 sk=t(认为 b0=−1),那么 [bt+1,bt+1](0≤t<d) 都是合法序列。那么就相当于 d 个合法序列拼在一起了。
但是还是没法求出具体值。考虑 Raney 引理的一个推广:
若序列 a1,⋯,an∈(−∞,1]⋂Z 满足 ∑ai=d,那么其 n 个循环移位产生的序列中有且仅有 d 个满足所有前缀和为正。
证明:设前缀和为 sk。设 bt 为最大的 k 使得 sk=t(认为 b0=0),那么所有 [bt+1,bt+1](0≤t<d) 将整个序列分成 d 段。每一段里的位置最大的最小值均满足条件;其它位置同理易证不合法。
于是答案为:
[xn]Fd(x)=dmn+d(mn+dn)
代数角度
考虑上文中得到的方程:
F(x)=xFm(x)+1
设 P(x)=F(x)−1,有:
P(x)=x(P(x)+1)m
其复合逆 Q(x) 满足:
x=(1+x)mQ(x)
Q(x)=x(1+x)−m
由拓展拉格朗日反演得到:
Fd(x)=1n[x−1]d(1+x)d−1x−n(1+x)mn=dn[xn−1](1+x)mn+d−1=dn(mn+d−1n−1)=dmn+d(mn+dn)
得到了同样的结果:
Fd(x)=∑k≥0dmk+d(mk+dk)xk
并且对所有整数 m 及实数 d 成立。
该多项式被称为广义二项级数 Bm(x):
Bm(x)=∑k≥0(mk)k−1–––––xkk!
下面再证另一个恒等式:
Fd(x)1−m+mF−1(x)=∑k≥0(mk+rk)xk
考虑对 Fd(x)=∑k≥0dmk+d(mk+dk)xk 求导,有:
Fd−1(x)F′(x)=∑k≥0kmk+d(mk+dk)xk
于是可以凑出要证的右式:
mFd−1(x)F′(x)+Fd(x)=∑k≥0(mk+dk)xk
下面只需要证:
⇔(xmF−1(x)F′(x)+1)(1−m+mF−1(x))=1
考虑对 F(x)=xFm(x)+1 求导,得:
F′(x)=Fm(x)+mxFm−1(x)F′(x)
F′(x)=Fm(x)1−mxFm−1(x)
代入后只要证:
⇔1−m+mF−1(x)1−mxFm−1(x)=1
⇔F−1(x)−1=−xFm−1(x)
⇔F(x)=xFm(x)+1
证毕。
将上述两个恒等式乘在一起可以获得一些拓展的恒等式。
例如用第一个恒等式自乘:
d+tmn+d+t(mn+d+tn)xk=Fd+t(x)=∑nxn∑k≤ndmk+d(mk+dk)tm(n−k)+t(m(n−k)+tn−k)
∑k≤ndmk+dtm(n−k)+t(mk+dk)(m(n−k)+tn−k)=d+tmn+d+t(mn+d+tn)
这是拓展的范德蒙德卷积(t=0 时退化)。并且还有(不会证):
∑k≤n(nk)dmk+dtm(n−k)+t(mk+d)k(m(n−k)+t)n−k=d+tmn+d+t(mn+d+t)n
这是拓展的二项式定理(t=0 时退化)。
两个恒等式乘在一起可以得到另一种结果:
∑k≤ndmk+d(mk+dk)(m(n−k)+tn−k)=(mn+d+tn)
∑k≤n(nk)dmk+d(mk+d)k(m(n−k)+t)n−k=(mn+d+t)n
超几何级数
超几何级数的定义是:
F(a1,⋯,am;b1,⋯,bn;x)=∑k≥0a¯¯¯k1⋯a¯¯¯kmb¯¯¯k1⋯b¯¯¯knxkk!
其中 bk 均不为 0 或负整数。
记该级数为 t0,t1,⋯。
注意到 t0=1,且相邻两项比值:
tk+1tk=(k+a1)⋯(k+am)x(k+b1)⋯(k+bn)(k+1)
为关于 k 的有理函数(即两个多项式之商)。
另一方面,任意有理函数都能表示成该形式(因式分解后若分母无 (k+1) 则补一个)。
接下来考虑超几何函数的各种具体形式。
当 m=n=0 时,就有最简单的:
F(;;x)=∑k≥0xkk!=ex
当 m=1,n=0 时,有:
F(a;;x)=∑k≥0a¯¯¯kxkk!=∑k≥0(a+k−1k)xk=(1−x)−a
当 m=2,n=1 时,F(a,b;c;x) 被称为高斯超几何级数。
试着改写范德蒙德卷积:
∑k≥0(ak)(bn−k)=(a+bn)
tk=a!k!(a−k)!b!(n−k)!(b−n+k)!
tk+1tk=(k−a)(k−n)(k+1)(k+b−n+1)
(bn)F(−a,−n;b−n+1;1)=(a+bn)
F(−a,−n;b−n+1;1)=(a+b)!(b−n)!(a+b−n)!b!
F(a,b;c;1)=(c−a−b−1)!(c−1)!(c−a−1)!(c−b−1)!
其中 b∈Z 且 b≤0。
还可以写成:
F(a,−n;c;1)=(c−a)¯¯¯nc¯¯¯n=(a−c)n––(−c)n––
还有更多内容,不过我没看懂就不写了
部分超几何和式
考虑这样一个问题:
给出超几何级数 f(k),求其有限不定积分 ∑f(k)δk=g(k)+C(即满足 f(k)=Δg(k)=g(k+1)−g(k))。
可惜的是不是所有这样的 g(k) 都具有简单形式,例如 g(k)+C=∑(nk)δk(通常都是用大家最熟悉的莫队算法做的)。
称超几何级数 f(k) 是可用超几何项求和的,如果其不定积分可用表示为超几何级数。
Gosper 算法:对于给定超几何级数,求出其超几何级数的不定积分或判定其不可用超几何项求和。
下面来介绍这个算法。设超几何级数 t(k) 的不定积分为 T(k)。
第一步是将比值表示成:
t(k+1)t(k)=p(k+1)p(k)q(k)r(k+1)
其中 q(k) 与 r(k) 满足:不存在 α−β∈Z+ 使得 q(−α)=r(−β)=0。
那么先令 p(k)=1,将比值拆成分子 q(k) 与分母 r(k+1)。
接下来如果 q(k) 和 r(k) 分别有因子 (k+α) 与 (k+β) 满足 α−β∈Z+,就将它们从 q(k) 和 r(k) 中除掉再令:
p(k)←p(k)(k+α−1)α−β−1––––––––=p(k)(k+α−1)⋯(k+β+1)
容易发现仍然满足条件。不断重复即可得到合法的 p(k),q(k),r(k)。
第二步考虑将 T(k) 改写成 T(k)=r(k)s(k)t(k)p(k),代入有:
T(k+1)=r(k+1)s(k+1)t(k+1)p(k+1)=q(k)s(k+1)t(k)p(k)
t(k)=T(k+1)−T(k)=q(k)s(k+1)t(k)p(k)−r(k)s(k)t(k)p(k)
p(k)=q(k)s(k+1)−r(k)s(k)
现在要求 s(k)。容易发现 s(k) 一定是有理函数,但事实上可以证明 s(k) 一定是多项式。
设 s(k)=f(k)/g(k)。代入可以得到:
p(k)g(k)g(k+1)=q(k)f(k+1)g(k)−r(k)f(k)g(k+1)
证明:先消去 f(k) 与 g(k) 的公因子。设最大的 N 使存在 x 满足 (k+x) 与 (k+x+N−1) 均为 g(k) 因子(注意 N=1 一定满足)。
将 k=−x 及 k=−x−N 代入条件式得:
r(−x)f(−x)g(−x+1)=q(−x−N)f(−x−N+1)g(−x−N)=0
由于 f(k) 与 g(k) 无公因子,故 f(−x)≠0,f(−x−N+1)≠0。由于 N 的最大性,x−1 与 x+N 也不为 g(k) 的根。
故 r(−x)=q(−x−N)=0。这与第一步中的限制矛盾。证毕。
有这个结论就好办了。设 s(k)=d∑t=0αtkt,代入解方程即可,若方程无解则说明原级数不可用超几何项求和。
最后一个问题:怎么确定 s(k) 的系数 d?
考虑 p(k)=q(k)s(k+1)−r(k)s(k)。令 Q(k)=q(k)−r(k),R(k)=q(k)+r(k),则有:
2p(k)=Q(k)(s(k+1)+s(k))+R(k)((s(k+1)−s(k))
这样有关 s(k) 的多项式次数可控了。
-
如果 deg(Q)≥deg(R),那么右式次数即为 d+deg(Q),故 d=deg(p)−deg(Q) 唯一确定。
-
如果 deg(Q)<deg(R)=e,这时 d 可能很大(高位全消掉了)。设 Q(k)=Ake−1+⋯,R(k)=Bke+⋯,则右式为 (2αd⋅A+dαd⋅B)kd+e−1+⋯。
于是要么 d=deg(p)−deg(Q)+1,要么 d=−2A/B,至多两种情况,分别做即可。
至此整个问题得到解决。
还有一个推广 Gosper-Zeilberger 算法,通过加维在不同的 n 中尝试寻找递推关系来解决 Gosper 算法求不出来的和式。
我没学过组合数 /kk
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步