《具体数学》(二)和式

递归式求和:

\left\{\begin{matrix} C_{0}=C_{1}=0& n=1||n=0& \\ C_{n}=n+1+(\sum_{k=0}^{n-1}C_{k})*\frac{2}{n}& n>1&; \end{matrix}\right.

像这种类型的递归式,要快速求出C_{1003}的值,用暴力求的方法,是要算很久的。

所以来化简一下2式:

f1:

nC_{n}=n^{_{2}}+n+2\sum_{k=0}^{n-1}C_{k} ,n>1

用n-1代替n,则f2:

(n-1)C_{n-1}=(n-1)^{_{2}}+(n-1)+2\sum_{k=0}^{n-2}C_{k} ,n-1>1

f1-f2:

nC_{n}-(n-1)C_{n-1}=2n+2C_{n-1} , n>2

这样一来,原式就化简成一个简单的递归式了,即\left\{\begin{matrix} C_{0}=C_{1}=0,C_{2}=3 & n=1||n=0\\ nC_{n}=2n+(n+1)C_{n-1} , n>2 & n>2 \end{matrix}\right.;

问题再一次来了,怎么求解这个递归式呢?

a_{n}=n,b_{n}=n+1,c_{n}=2n,即a_{n}C_{n}=c_{n}+b_{n}C_{n-1}

假设,存在一个s_{n}满足s_{n-1}a_{n-1}=s_{n}*b_{n},即s_{n}a_{n}C_{n}=s_{n-1}a_{n-1}C_{n-1}+s_{n}c_{n},令S_{n}=s_{n}a_{n}C_{n},即:

S_{n}=S_{n-1}+s_{n}c_{n}     =>    S_{n}=s_{2}*a_{2}*C_{2}+\sum_{k=3}^{n}s_{k}c_{k}    =>  将S_{n}=s_{n}a_{n}C_{n}带入前式,即:

C_{n} =\frac{1}{s_{n}*a_{n}}(\sum_{k=3}^{n}(s_{k}c_{k})+s_{2}*a_{2}*C_{2})=\frac{1}{s_{n}*a_{n}}(\sum_{k=3}^{n}(s_{k}c_{k})+s_{3}*b_{3}*C_{2}),至此,就会有一个问题了s_{n}=?,注意看s_{n}*b_{n}=s_{n-1}*a_{n-1} => s_{n}=\frac{a_{n-1}}{b_{n}}s_{n-1},在求解这个递归式得:s_{n}=\tfrac{a_{n-1}*a_{n-2}*...*a_{0}}{b_{n}*b_{n-1}*....*b_{1}}=\frac{(n-1)*(n-2)*...*1}{(n+1)*(n-0)*...*3}=\frac{2}{(n+1)n};所以\sum_{k=3}^{n}(s_{k}c_{k})=4\sum_{k=3}^{n}\frac{1}{k+1}

所以最后的结果是:s_{3}=\frac{2}{4*3},b_{3}=4,所以C_{n}=\frac{(n+1)}{2}(\sum_{3}^{n}(s_{k}c_{k})+\frac{2}{3})=\frac{n+1}{2}(\sum_{k=1}^{n}(s_{k}c_{k})-\frac{4}{3})C_{n}=2(n+1)\sum_{k=3}^{n}\frac{1}{k+1}-\frac{2}{3}(n+1)

再至此,就会剩下最后一个问题了\sum_{k=1}^{n}\frac{1}{k+1}是多少?

H_{n}=\sum_{k=1}^{n}\frac{1}{k},这个式子和最后出现的和式相似,事实上因为他出现的如此频繁,我们可以给他取一个名字调合数(小提琴弦所产生的第k个范音(harmonic)是弦长1/k处所产生的基音)。下面,求解:

\sum_{1<=k<=n}\frac{1}{k+1}=\sum _{1<=k-1<=n}\frac{1}{k}=\sum _{2<=k<=n+1}\frac{1}{k}=\sum _{1<=k<=n}\frac{1}{k}-1+\frac{1}{n+1}=H_{n}-\frac{n}{n+1}=ln(n)+0.57721566490153286060651209-\frac{n}{n+1}

 

所所以,结果是:

C_{n}=2(n+1)H_{n}-\frac{8}{3}n-\frac{2}{3} ,n>1

 

这种方法被称为扰动法(perturbation method)。利用扰动法,可以用一个封闭形式来计算一个和式。其思想是从一个未知的和式开始,并记她为Sn:

                                                        S_{n}=\sum_{0<=k<=n} a_{k}

然后将它的最后一项和第一项分离出来,用两种方法重新改写S_{n+1}:

                                     S_{n}+a_{n+1}=\sum_{0<=k<=n+1}=a_{0}+\sum_{1<=k<=n+1}a_{k}

                                                       =a_{0}+\sum_{i<=k+1<=n+1}a_{k+1} =a_{0}+\sum_{0<=k<=n}a_{k+1}

最后对上面的和式加以处理,并尝试用S_{n}表示出来。如果成功,就会得到一个方程。。

说实话,这篇文章也算不上原创,可以说全是书上的内容《具体数学  计算机科学基础(第二版)》

欢迎指出错误!!!

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值