[zZ]常见递推关系解法

1.  a[n+1]=a[n]+f(n)  ->  a[n]=a[1]+sum(f(k) |1<=k<n)
移项后叠加:a[n]=a[1]+sum(f(k) |1<=k<n)

2.a[n+1]=a[n]*f(n)  ->  a[n]=a[1]*mul(f(k) | 1<=k<n)
移项后叠乘:a[n]=a[1]*mul(f(k) | 1<=k<n)

3.a[n+1]=p*a[n]+q  ->  a[n]=a[1] + (a[2]-a[1])*(1- p^(n-1))/(1-p)
  相减得(a[n+1]-a[n])=p*(a[n]-a[n-1]),即b[n+1]=p*b[n];
  所以a[n+1]-a[n]=(a[2]-a[1])*p^n
  移项叠加得a[n] = a[1] + sum(a[k]-a[k-1] | 1<k<=n)
= a[1] + (a[2]-a[1])*(1- p^(n-1))/(1-p);

4.a[n+1]=p*a[n]+q(n)  ->  a[n]= ( a[1]/p + sum(q(k)/p^(k+1)) )*p^(n+1)
  两边除p^(n+1)得,a[n+1]/p^(n+1) = a[n]/p^n + q(n)/p^(n+1)
即b[n+1]=b[n]+q(n)/p^(n+1),
形式同1,可解得:b[n]=b[1]+sum(q(k)/p^(k+1) | 1<=k<n)
所以a[n]=b[n]*p^(n+1);

5.a[n+1]=p(n)*a[n]+q(n)  ->  a[n]=(a[1]*f(1)+sum(q(k)/f(k+1))) / f(n)
令p(n)=f(n)/f(n+1),则a[n+1]*f(n+1)=a[n]*f(n)+q(n)*f(n+1)
即b[n+1]=b[n]+q(n)*f(n+1),形式同1。
可解得b[n]=b[1]+sum(q(k)/f(k+1)),a[n]=b[n]/f(n)
即a[n]=(a[1]*f(1)+sum(q(k)/f(k+1))) / f(n)

6.线性齐次递推关系(如a[n]=a[n-1]+2*a[n-2]+a[n-1])
  ①给出相应的特征方程(如x^3 - x^2 - 2*x - 1=0),求解特征方程得到根h1,h2..
  ②如果没有重根,则直接代入初始条件解
a[n]=c1*(h1^n)+c2*(h2^n)+c3*(h3^n)+…的常数c1,c2,c3….可得通项公式。
  ③若有重根,比如h2=h3=h4≠h1,则——
a[n]=c1*(h1^n)+c2*(h2^n)+c3*n*(h3^n)+c4*(n^2)*(h4^n),代入初始条件解出常数c1,c2…,可得通项公式。

7.当然也可以用矩阵乘法来logN解线性齐次递推关系:
对于a[n]=k1*a[n-1]+k2*a[n-2]+k3*a[n-4],构造矩阵G
0  1  0  0
0  0  1  0
0  0  0  1
K3 0  k2  k1
在右上角的(n-1)*(n-1)的小矩阵中的主对角线上填1,矩阵第n行填对应的系数,其它地方都填0。
最后An=A0*G^n为结果矩阵(A0为初始矩阵)


不过更多时候遇到的会是更复杂的递推关系,这时需要的是通过换元,待定系数构造,周期性甚至猜想,数学归纳等等方式技巧来灵活处理。
当然数据规模不太大的,或者递推关系增长很快的情况下也可以直接打表递推,不一定非要解出通项公式,事实上ACM中很多题都是这样。

作者:pumpkinsm@Pumpkin's
地址:http://ppksm.com/blog/read.php?158
欢迎转载,转载时请以链接形式注明作者和原始出处。=v=

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值