和式的计算
一.什么是和式.
我们要表示一个数列的前n项之和,我们可以采用如下的方法:
a1+a2+⋯+ak
其中(a_i)表示数列中的第i项。和式中的每个元素
ai称为项。我们必须让它看起来清楚明白。比如说:
1+2+⋯+2n−1
它是表示一个等比数列的n项之和还是前
2n−1个自然数的和呢?
为了更清晰的表示它,我们应该写成:
20+21+⋯+2n−1.
这种方式采用了
…这个记号,不过它有点儿冗长,我们还可以采用有确定界限的表示形式:
∑k=1nak
∑这个符号是约瑟夫
⋅傅里叶于1820年引入的,随即风靡整个数学界。指标变量i与
∑密切相关,因为
ai中的
i与
∑外出现的
i无关。任何其他的字母代替这里的i都不会改变它的含义。
还有一种推广的(\sum)符号比这种有确定界限的形式更加有用,我们直接把一个或多个条件写在(\sum)的下面,以此来指定求和指标变量的集合,例如:
1≤k≤n∑ak
有时使用确定界限的求和符号要繁琐的多。
比如,我们要表示不超过100的所有奇数的平方和.使用扩展的和式:
1≤k<100∧k是奇数∑k2
而如果使用有确定界限的求和符号,则需要表示成:
k=0∑49(2k+1)2
而且扩展的求和符号还有一个好处,可以比较方便的换指标,比如:
1≤k≤n∑ak=1≤k+1≤n∑ak+1
而如果是:
k=1∑n=k=0∑n−1ak+1
不容易看出它的变化,而且很容易犯错。
所以,一般情况下,当要陈述一个问题或表示一个结论时,常会使用带有上下确定界限的
∑,而当要处理一个需要对指标变量进行变换的的和式时,则尽量在
∑下方列出关系式的形式。
肯尼迪
⋅艾弗森在他的程序设计语言APL中引人了一个奇妙的思想,这一思想仅仅包含一个含在括号里的为真或为假的命题,其结果为1(如果该命题为真),或结果为0(如果该命题为假).例如:
[p是素数]={1,p是素数0,p不是素数
艾弗森表示法功能很强大,无论什么求和指标,我们都可以清晰的表示出来。有时
ak并非对所有整数k都有定义.当
P(k)为假时,则
[P(k)]就是表示零,正好可以避免统计这些未定义的k值。比如:我们要表示所有小于N的素数的倒数之和,可以这样写:
p∑[p是素数][p≤N]/p
当p=0时,不用担心存在用零做除数的问题,因为此时分子也为0。
又比如要表示N的所有约数之和,可以表示
k=1∑n[k∣n]∗k
二.和式的处理
成功处理和式的关键在于,将一个
∑改变成另一个更简单或者更接近某个目标的
∑,通过学习一些基本的变换法则并在实践中练习使用它们。
设K是任意一个有限整数集合,K种元素的和式可以用三条简单的法则加以变换:
k∈K∑cak=ck∈K∑ak(分配律)
k∈K∑(ak+bk)=k∈K∑ak+k∈K∑bk(结合律)
k∈K∑ak=p(k)∈K∑ap(k)(交换律)
此处的交换律和一般我们认为的交换律并不一样,可以认为是换指标法。这里p(k)是所有整数集合的任意一个排列。这样,我们就可以将求和项重新排序。
我们来看一些简单的变换吧。
高斯9岁的时候使用了一个技巧快速地求出了
∑1≤k≤100k,现在我们使用和式的变换来证明这个技巧的正确性。
S=0≤k≤n∑(a+bk)
使用交换律,我们可以用n-k来代替k,得到:
S=0≤n−k≤n∑(a+b(n−k))=0≤k≤n∑(a+bn−kn)
利用结合律,将这两个S相加,
2S=0≤k≤n∑((a+bk)+(a+bn−kn))=0≤k≤n∑(2a+bn).
两边除以2,
我们就证明了
S=k=0∑n(a+bk)=(a+21bn)(n+1)
在一般的交换律中,函数p(k)都假设所有整数的排列。换句话说,对每个整数n,都恰好存在一个整数k,使得p(k)=n.否则交换律可能不成立。
比如:
1≤k≤5∑ak̸=1≤k2≤5∑ak2
前者是
a0+a1+a2+a3+a4+a5,而后者是
a4+a1+a0+a1+a4
另一方面,我们也能将排列限制稍微放松一点,我们只需要求,当n是指标集K的一个元素时,恰好有一个整数k满足p(k)=n,如果
n∈/K,那么,不管p(k)=n以怎样的频率出现都无关紧要,因为这样的k不出现在和式中。
k∈K∧k是偶数∑ak=2k∈K∑a2k.
通过公式中间的逻辑命题为0或为1的艾弗森约定,可以与分配律、结合律以及交换律一起使用,以导出和式的其他性质。
例如:如果K和K’是整数的任意集合,那么
k∈K∑ak+k∈K′∑ak=k∈K∩K′∑ak+kinK∪K′∑ak.
这是由
[k∈K]+[k∈K′]=[k∈K∩K′]+[k∈K∪K′]推出的。
在和式的处理中,我们经常使用一种技巧,称为“扰动法”(perturbation method)。所谓扰动法,就是把和式中的某一项分离出去或添加一个新的项进来.
利用扰动法,我们通常可以求出一个和式的通解.
我们经常从一个未知的和式开始,并记它为
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=a+1≤k≤n∑axk=a+x0≤k≤n−1∑axk=a+x∗(Sn−axn)
Sn=0≤k≤n∑axk=1−xa−ax(n+1)
再看一个稍难一点的例子,求
0≤k≤n∑kxk
Sn−xSn=0≤k≤n∑kxk−x0≤k≤n∑=1≤k≤n∑xk−nxk+1=1−xx−xn+1−nxn+1
Sn=(1−x)2x−xn+1−nxn+1(1−x)=(1−x)2x−(1+n)xn+1+nxn+2
其实还有一种完全不同的方法可以做这个事情,即使用微积分来计算。
k=0∑nxk=1−x1−xn+1
在等式两边对x求导,对左边求导可得:
(k=0∑nxk)′=k=1∑nkxk−1=k=0∑nkxk−1
对右边求导可得:
(1−x1−xn+1)′=1−x−(n+1)xn+(1−x)21−xn+1=(1−x)2(n+1)xn+1−(n+1)xn+1−xn+1=(1−x)21−(n+1)xn+nxn+1
用微积分处理和式也是比较常见的一种方式。
三.多重和式的处理
如果有两个或更多的指标来表示一个和式,则成为多重和式。
比如:
1≤j,k≤3∑ajbk
也可以表示为
1≤j≤3∑aj1≤k≤3∑bk
同样可以采用艾弗森表示法:
P(j,k)∑aj,k=j,k∑aj,k[P(j,k)]
我们有时候会使用两个
∑符号来表示一个二重和式,当我们这样写:
j∑k∑aj,k[P(j,k)]
表达的意思就是
j∑(k∑aj,k[P(j,k)])
一般是把括号省略掉了,默认求和的顺序是从右到左,即从内向外。
在处理多重和式时,有一个基本法则,称为交换求和次序。
比如
j∑k∑aj,k[P(j,k)]=k∑j∑aj,k[P(j,k)].
如果多重和式的指标是相互独立的,则问题会变得比较简单:
比如:
i=1∑nj=1∑m(ai+bj)=i=1∑n(mai+j=1∑nbj)=mi=1∑nai+i=1∑nj=1∑mbj=mi=1∑nai+nj=1∑mbj
又比如:
i=1∑nj=1∑maibj=i=1∑naij=1∑mbj
两个数组中任意一对元素乘积之和等于两个数组元素各自之和的乘积。
如果多重和式的指标之间有联系,我们也可以使用交换律,合理的使用交换律有可能使得问题变得简单。但是在确定每个指标的范围则问题需要费点脑筋。
1≤i≤n∑i≤j≤n∑aibj=1≤j≤n∑1≤i≤j∑aibj
试求:
0≤i≤n∑i≤j≤n∑(j−i)
设t=j-i
则
ans=0≤i≤n∑i≤t+i≤n∑t=0≤i≤n∑0≤t≤n−i∑t=0≤t≤n∑(n−t+1)t=0≤t≤n∑(n+1)t−0≤t≤n∑t2=2(n+1)(n+1)n−6n(n+1)(2n+1)=6n(n+1)(n+2)
现在看另一个二重和式:
S=1≤j<k≤n∑(ak−aj)(bk−bj)
试降低求S的时间复杂度。
S=1≤j<k≤n∑(akbk+ajbj−akbj−ajbk)=(n−1)1≤j≤n∑ajbj−1≤j<k≤n∑(akbj+ajbk)
设
S1=1≤j<k≤n∑(akbj+ajbk)=1≤j<k≤n∑akbj+1≤j<k≤n∑ajbk=1≤j<k≤n∑akbj+1≤k<j≤n∑akbj=1≤j≤n∑bj(1≤k≤n∑ak−aj)=1≤j≤n∑bj1≤k≤n∑ak−1≤j≤n∑ajbj
于是
S=1≤j<k≤n∑(ak−aj)(bk−bj)=n1≤j≤n∑ajbj−1≤j≤n∑bj1≤j≤n∑aj
其中,这个恒等式得到切比雪夫单调不等式的一个特例:
(k=1∑nak)(k=1∑nbk)≤nk=1∑nakbk,a1≤⋯≤an且b1≤⋯≤bn,(k=1∑nak)(k=1∑nbk)≥nk=1∑nakbk,a1≤⋯≤an且b1≥⋯≥bn
如果
p(k)是整数的任意一个排列,则
k∈K∑ak=p(k)∈K∑ap(k)
如果f是一个任意的函数
f:J→K
它将整数
j∈J变成整数
f(j)∈K,那么用
f(j)替换k会发生什么?
指标替换的一般公式为:
j∈J∑af(j)=k∈K∑ak#f−(k)
这里,
#f−(k)表示集合
f−(k)={j∣f(j)=k}
中的元素个数,即使得
f(j)等于
k的
j∈J的值的个数.
比如:
i=1∑n⌊3i⌋=i=1∑⌊3n−2⌋3i+⌊3n⌋∗((n+1)mod3)