2.1 记号
有确定界限的形式
我们要对一个有确定界限的式子求和:
a1+a2+⋯+an
其中每个 ak 都是用某种方式定义的一个数。
我们可以用求和符号 ∑ 将其表示成这样:
k=1∑nak
即:
k=1∑nak=a1+a2+⋯+an
如果难以理解,这里还有其它的一些例子:
k=0∑n+12k=20+21+⋯+2n+2n+1
k=114∑514lnk=ln114+ln115+⋯+ln513+ln514
这上面的 k 的含义是指标(index,也可以翻译为编号),它是一个变量,随取值的变化而变化(如果你是 OIer,这应该很好理解),可以用任意字母替换,即:k=0∑nak 与 i=0∑nai 是没有区别的。
另外,∑k=1nak 与 k=1∑nak 也是没有区别的,只是这样能使得排版更加美观。。
一般形式
直接把一个或多个条件写在 ∑ 下面,以此指定求和所应该取的指标集,例如:
k=1∑nak
也可以表示为:
1≤k≤n∑ak
这种形式更加灵活,打破了只能对连续整数指标求和的限制。例如,我们可以把 1 到 n 之间的质数之和表示为:
p≤n且p是质数∑p
同样的,1≤k≤n∑ak 与 ∑1≤k≤nak 也是没有区别的。
一种简单的符号
注意,这种写法并不规范,正式考试中最好避免使用
我们把一个命题放在中括号中,当这个命题为真时,其结果为 1,当命题为假时,其结果为 0。例如:
[p是素数]={1,p是质数0,p是合数
那么我们就可以把:
k=1∑nak
表示为:
k∑ak[1≤k≤n]
这一表示方式将在某些时候非常好用。
附带提及,求积符号为 ∏ ,与 ∑ 用法一致。例如:
k=1∏nak=a1×a2×⋯×an
递归式转和式
对于一个递归式:
anTn=bnTn−1+cn
我们恰当地选取一个求和因子 sn 满足:
snbn=sn−1an−1
用这个因子 sn 来乘等式两边:
snanTn=snbnTn−1+sncn
设 Sn=snanTn,就可以得到:
Sn=Sn−1+sncn
从而:
Sn=s0a0T0+k=1∑nskck=s1b1T0+k=1∑nskck
那么:
Tn=snan1(s1b1T0+k=1∑nskck)
现在的问题是如何选取一个合适的 sn。
我们可以将 snbn=sn−1an−1 展开:
sn=bnsn−1an−1=bnbn−1⋯b2an−1an−2⋯a1
也就是说, sn 可以选取为这个分式的任意常数倍。
下面仍然是一个例子:
快速排序复杂度
快速排序所做的比较步骤的平均次数满足递归式:
C0Cn=C1=0;=n2k=0∑n−1Ck+n+1,n>1
作为一个好习惯,我们先计算出小的情形:C2=3,C3=6,C4=219。下面是化简:
首先规避除法,在等式两边同时乘上 n:
nCn=2k=0∑n−1Ck+n2+n,n>1
接下来想办法规避 ∑ ,我们用 n−1 替换 n,就有:
(n−1)Cn−1=2k=0∑n−2Ck+(n−1)2+n−1,n−1>1
用第一个方程减去这个方程,就消掉了 ∑:
nCn−(n−1)Cn−1=2Cn−1+2n,n>2
于是就化简为了:
C0nCn=C1=0;C2=3;=(n+1)Cn−1+2n,n>2
显然,这个式子形如:anTn=bnTn−1+cn ,其中 an=n,bn=n+1。
因此我们要用求和因子
sn=bnbn−1⋯b2an−1an−2⋯a1=(n+1)×n×⋯×3(n−1)×(n−2)×⋯×1=(n+1)n2
的整数倍来遍乘这个递归式。那么它的解就是:
Cn=2(n+1)k=1∑nk+11−32(n+1),n>1
最后出现的这个和式非常常见,因此它有一个特殊的名称和记号:
Hn=1+21+⋯+n1=k=1∑nk1
字母 H 表示 Harmonic,即“调和的”,Hn 被称为调和数(Harmonic Number)。
我们尝试用 Hn 来表示 Cn
k=1∑nk+11=1≤k≤n∑k+11=1≤k−1≤n∑k1=2≤k≤n+1∑k1=(1≤k≤n∑k1)−11+n+11=Hn−n+1n
那么
Cn=2(n+1)Hn−38n−32,n>1
2.3 和式的处理
设 K 是任意一个有限整数集合,K 中的元素的和式可以用三条基本变换法则加以交换:
分配律:
k∈K∑cak=ck∈K∑ak
结合律:
k∈K∑(ak+bk)=k∈K∑ak+k∈K∑bk
交换律(这里的 P(k) 是这个整数集合的任意一个排列):
k∈K∑ak=p(k)∈K∑ap(k)
需要注意的是,这里对三个定律的定义与通常数学书中有很大的区别。
下面是一个例子:
高斯求和
我们要计算一个等差级数的一般和:
S=0≤k≤n∑(a+bk)
根据交换律,用 n−k 替代 k:
S=0≤n−k≤n∑(a+b(n−k))=0≤k≤n∑(a+bn−bk)
利用结合律将二者相加:
2S=0≤k≤n∑((a+bk)+(a+bn−bk))=0≤k≤n∑(2a+bn)
利用分配律:
2S=(2a+bn)0≤k≤n∑1=(2a+bn)(n+1)
最后除以二,就证明了:
k=0∑n(a+bk)=2(2a+bn)(n+1)
即小学背的“首项加末项乘项数除以二”。
艾弗森约定
设 K 和 K′ 是整数的任意集合,那么:
k∈K∑ak+k∈K′∑ak=k∈K∩K′∑ak+k∈K∪K′∑ak
容斥原理的阴影
这是由下面两个一般公式推出的:
k∈K∑ak=k∑ak[k∈K]
[k∈K]+[k∈K′]=[k∈K∩K′]+[k∈K∪K′]
扰动法
扰动法的基础是将一项分离出去,利用它,我们常常可以用封闭形式来计算一个和式,其思想是从一个未知的和式开始,记为 Sn:
Sn=0≤k≤n∑ak
然后将它的最后一项和第一项分离出来,用两种方法表示 Sn+1:
Sn+an+1=0≤k≤n+1∑ak=a0+1≤k≤n+1∑ak=a0+1≤k+1≤n+1∑ak+1=a0+0≤k≤n∑ak+1
现在我们可以尝试用 Sn 将最后那个和式表示出来。如果成功,我们就得到一个关于 Sn 的方程。
下面是几个例子:
简单的例子
几何级数的和:
Sn=0≤k≤n∑axk
直接使用刚刚推导的结论:
Sn+axn+1=ax0+0≤k≤n∑axk+1
用分配律将右边的和式提出一个 x,于是:
Sn+axn+1=ax0+0≤k≤n∑axk+1=ax0+x0≤k≤n∑axk=a+xSn
对 Sn 进行求解,就可以得到:
0≤k≤n∑axk=1−xa−axn+1,x=1
有点难的例子
Sn=0≤k≤n∑k2k
还是可以得到:
Sn+(n+1)2n+1=0≤k≤n∑(k+1)2k+1
接着使用结合律:
0≤k≤n∑(k+1)2k+1=0≤k≤n∑k2k+1+0≤k≤n∑2k+1
这两个和式中第一个等于 2Sn,第二个就是几何级数,由“简单的例子”可以知道它等于 2n+2−2
因此我们有:
Sn+(n+1)2n+1=2Sn+2n+2−2
解得:
Sn=(n−1)2n+1+2
再进一步
如果用 x 代替 2,即求:
Sn=0≤k≤n∑kxk
用和上面类似的推导可以得到:
Sn+(n+1)xn+1=xSn+1−x(x−xn−2)
解之,
Sn=(1−x)2x−(n+1)xn+1+nxn+2,x=1
另外,我们还可以使用微积分的初等技巧来推导这个封闭形式。我们在方程:
k=0∑nxk=1−x1−xn+1
两边关于 x 求导,就可以得到:
k=0∑nkxk−1=(1−x)2(1−x)(−(n+1)xn)+1−xn+1=(1−x)21−(n+1)xn+nxn+1
可以看到,微积分和离散数学有很多的联系。