具体数学第二章2.1~2.3小节,希望对大家有帮助!交流使你我共同进步^^
引子
我们对下述和式
Sn=k=0∑nak应该很熟悉,可以想到高等数学中的级数,用求导之类的方法计算。那么它和递归式有何联系呢?
其实上面的求和表达式可以转化为下述递归表达式:
S0=a0
Sn=Sn−1+an
那么我们就可以用第一章节学到的求解递归式的方法来做了。
试想
an=β+γn for
n>0,可以转化成求解
R0=α
Rn=Rn−1+β+γn for
n>0
那么
R1=α+β+γ,R2=α+2β+3γ
对于上述式子,如果用
A(n),B(n),C(n)来表示
α,β,γ前的系数
Rn=A(n)α+B(n)β+C(n)γ
记得第一章讲过的成套方法,主要是先寻找一组容易知道的特解,然后将特殊情形组合起来求解一般式。
例如上述例子可以先假设三种情形:
1)
Rn=1
⇒
α=1,β=γ=0
⇒
A(n)=1
2)
Rn=n
⇒
α=0,β=1,γ=0
⇒
B(n)=n
3)
Rn=n2
⇒
α=0,β=−1,γ=2
⇒
2C(n)−B(n)=n2
⇒
C(n)=(n2+n)/2
上述例子巧妙地将和式转化为递归式来求解,当然递归式也可以转化为和式求解。
求和因子(summation factor)
anTn=bnTn−1+cn
两边同乘
Sn
⇒
SnanTn=SnbnTn−1+Sncn,(若要转化为求和递归式,形如:
Snbn=Sn−1an−1 )
令
Sn′=SnanTn,得
Sn′=Sn−1′+Sncn=S0a0T0+∑k=1nSkck=S1b1T0+∑k=1nSkck
⇒
Tn=snan1(s1b1T0+∑k=1nskck)
问题迎刃而解!但是我们怎么才能计算出
Sn?
再来看这个式子,
Snbn=Sn−1an−1,可以用递推方式转化成
sn=bnbn−1⋯b2an−1an−2⋯a1
PS:这里的所有a,b均不为0,否则没有意义啦!
有人会想,这边是不是少了一个
sn,是的,因此是采用上述
sn的某个倍数来做乘积,不过没有关系啦,反正两边可以约掉。
例题
例题1:设n个数的快速排序,平均次数满足
C0=C1=0Cn=n+1+n2∑k=0n−1Ck,n>1
首先避免除法,其次想到把求和符号去掉,两边同乘
n,去掉分母中的
n,得到
nCn=n2+n+2k=0∑n−1Ck,n>1(1)
用
n−1代替
n
(n−1)Cn−1=(n−1)2+(n−1)+2k=0∑n−2Ck,n−1>1(2)
(1)-(2)式相减,转化成
C0=C1=0;C2=3
nCn=(n+1)Cn−1+2n,n>2
由上述的求和因子法可以得到
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=1nk+11−32(n+1),n>1
⇒
Cn=2(n+1)Hn−38n−32
顺便提一哈,这边
Hn=1+21+⋯+n1=∑k=1nk1 称为调和数(harmonic number)
求和三大定律
分配律、结合律、交换律
如下例题:
所谓扰动法
就是把单独一项从和式中分出去。
小故事
肯尼斯·艾弗森在他的程序语言APL中引入了一个奇妙的思想,就是上述表达式的转换,把一个为真或者为假的命题放在括号中
[p是素数]={1,p是素数0,p不是素数