递归问题
汉诺塔
设 n 个盘子的汉诺塔问题需要 Tn 步。
Tn={1,2Tn−1+1,n=1n>1=2n−1
平面上的直线
设 n 条直线分割平面的最大区域数为 Ln,即第 n 条直线与前 n−1 条直线相交。
Ln={1,Ln−1+n,n=0n>0=2n(n+1)+1
如果换成是 n 个圆分割平面,也是让圆与前面的圆相交即可。
Cn={2,Cn−1+2(n−1),n=1n>1=n(n−1)+2
重点是判断出新增加的交点与新增的区域的关系。
约瑟夫问题
设 n 个人围成一圈,从第 1 个人开始,每隔 1 个人删去一个人,问最后剩下的人是第几个。
J(1)J(2n)J(2n+1)=1,=2J(n)−1,n≥1=2J(n)+1,n≥1
可以神秘地得到
J(2m+l)=2l+1,m≥0,0≤l<2m
其中 n=2m+l,l 为最后剩下的人的位置。
清单法:
对于
f(1)f(2n)f(2n+1)=α,=2f(n)+β,n≥1=2f(n)+γ,n≥1
可以假设
f(n)=A(n)α+B(n)β+C(n)γ
设 n=2m+l,显然,易知
A(n)=2m(1)
接下来可以通过带入特殊的数来求解。首先带入 f(n)=1,可以得到
α=1,β=−1,γ=−1
即
A(n)−B(n)−C(n)=1(2)
然后带入 f(n)=n,可以得到
α=1,β=0,γ=1
即
A(n)+C(n)=n(3)
之后,联立 (1)、(2) 和 (3) 可以得到
A(n)B(n)C(n)=2m=2m−1−l=l
即
f(n)=2mα+(2m−1−l)β+lγ
对于其他递归式,也可以通过类似的方法求解。常见的取值有 f(n)=1,n,n2 等,此外,如果遇到特殊情况,也可以尝试 2n 等值。
和式
表示法
和与递归
死去的高中数列记忆突然猛烈地攻击我!
可以将形如 anTn=bnTn−1+cn 的递归式转化为和式。关键在于找到一个求和因子 sn,使得
Snsnbn=snanTn=sn−1an−1
从而可以通过求解
Sn=Sn−1+sncn
来得到原递归式的解
Tn=snan1(s1b1T0+k=1∑nskck)
其中
sn=bnbn−1⋯b2an−1an−2⋯a1
注意除数不能为 0!
多重和式
Chebyshev 单调不等式:由
j=1∑najj=1∑nbj=nk=1∑nakbk−1≤j<k≤n∑(ak−ak)(bk−bj)
可得
j=1∑najj=1∑nbj≤nk=1∑nakbk,a1≤⋯≤an,b1≤⋯≤bnj=1∑najj=1∑nbj≥nk=1∑nakbk,a1≤⋯≤an,b1≥⋯≥bn
一般性的方法
扰动法
将和表达成两种不同形式,并且分别化为待求值的(线性)多项式,最后通过解方程得到待求值。最常见的方式是分离出 Sn 的首项和尾项。
成套方法
对于
R(n)R(n)=α=R(n−1)+βn+γ
分别取 R(n)=1,n,n2 ,可得
α=1,β=0,γ=0α=0,β=0,γ=1α=0,β=2,γ=−1
从而解得
A(n)=1,B(n)=2n(n+1),C(n)=n
积分
整值函数
二项式系数
特殊值:
(0r)=1,(1r)=r
交换等式:
(kr)=(r−kr),0≤k≤r
吸收等式:
(kr)=kr(k−1r−1),k=0
加法等式:
(kr)=(kr−1)+(k−1r−1)
相伴等式:
(r−k)(kr)=r(kr−1)
母函数
(1−z)n+11(1−z)n+1zn=k=0∑∞(nn+k)zk,n≥0=k=0∑∞(nk)zk,n≥0
特殊的数
斯特林数
第二类斯特林数
第二类斯特林数 {nk} 表示将 n 个元素分成 k 个非空集合的方法数。
{nk}=k{n−1k}+{n−1k−1}
其有以下特殊值:
{n0}{n1}{n2}{nn}{nn−1}={1,n=00,n>0={0,n=01,n>0=2n−1−1,n>0=1,n≥0=(2n)
注意第二类斯特拉数是无序的,即划分 A∪B=B∪A。如果需要得到有序的结果,只需要乘以 k! 即可,即
{nk}k!
如果允许空集,那么结果为
i=0∑k{ni}
第一类斯特林数
第一类斯特林数 [nk] 表示将 n 个元素分成 k 个轮换的方法数。例如下面都是同一个轮换:
[A,B,C]=[B,C,A]=[C,A,B]
其有以下递推式
[nk]=(n−1)[n−1k]+[n−1k−1]
其有以下特殊值:
[n1][nn][nn−1]=(n−1)!,n>0=1,n≥0=(2n)
两类斯特林数之间的关系:
[nk]>{nk},k≥0
离散概率