算法学习 | 递归方程求解

目录

一、特征方程

2.1 线性齐次递推式的求解

2.1.1 对于一阶齐次递推关系

2.1.2 对于二阶齐次递推关系

 2.2 非齐次递推式的求解

2.2.1 常用的非齐次递推式的求解1(ing)

2.2.2 常用的非齐次递推式的求解2(ing)

二、递归树

三、主方法

3.1 主定理

3.2 应用实例


一、特征方程

2.1 线性齐次递推式的求解

\begin{cases} & \ f(n)=a_{1}f(n-1) + a_{2}f(n-2)+...+a_{k}f(n-k) \\ & \ f(i)=b_{i}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ,0\leq i< k \end{cases}

x^{n}来代替该等式中的f(n),则f(n-1)=x^{n-1},...,f(n-k)=x^{n-k}

所以有:x^{n}=a_{1}x^{n-1}+a_2x^{n-2}+...+a_kx^{n-k}

两边同时除以x^{n-k}得到:   x^k=a_1x^{k-1}+a_2x^{k-2}+...+a_k

或者写成:   {\color{Red} x^k-a_1x^{k-1}-a_2x^{k-2}-...-a_k=0} ,此为特征方程,

可以求出特征方程的根,如果该特征方程的k个根互不相同,令其为r1、r2、…、rk,

则得到递归方程的通解为:

         {\color{Red} f(n)=c_1r_{1}^{n}+c_2r_2^n+...+c_kr_k^n}

再利用递归方程的初始条件(f(i)=b_{i}\ ,0\leq i< k)确定通解中的待定系数

从而得到递归方程的解。

2.1.1 对于一阶齐次递推关系

f(n)=af(n-1),假定序列从f(0)开始,且f(0)=b,可以直接递推求解,即:

f(n)=af(n-1)=a^2f(n-2)=...=a^nf(0)=a^nb

2.1.2 对于二阶齐次递推关系

f(n)=a_1f(n-1)+a_2f(n-2),假定序列从f(0)开始,且f(0)=b_1,f(1)=b_2

其特征方程为

x^2-a_1x-a_2=0

令这个二次方式的根是r_1r_2,可以求解递推式的解是:

f(n)=c_1r_1^n+c_2r_2^n \: \: \: \: ,if \: r_1\neq r_2 \\ f(n)=c_1r^n+c_2nr^n \: \: \: \: ,if \: r_1= r_2=r \\

​​​代入f(0)=b_1,f(1)=b_2  求出c_1c_2

例题:分析求解Fibonacci数列的递归算法的时间复杂度

 2.2 非齐次递推式的求解

\begin{cases} & \ f(n)=a_{1}f(n-1) + a_{2}f(n-2)+...+a_{k}f(n-k) {\color{Blue} +g(n)} \\ & \ f(i)=b_{i}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ,0\leq i< k \end{cases}

其通解形式如下:   

          {\color{Red} f(n)=f'(n)+f''(n)}

其中,f'(n)是对应齐次递归方程的通解,f''(n)是原非齐次递归方程的特解。

现在还没有一种寻找特解的有效方法。一般是根据g(n)的形式来确定特解:

假设g(n)是n的m次多项式,即g(n)=c_0n^m+...+c_{m-1}n+c_m

则特解{\color{Red} f''(n)=A_0n^m+A_1n^{m-1}+...+A_{m-1}n+A_m}  

代入原递归方程求出A_0A_1、…、A_m。   

再代入初始条件(f(i)=b_{i}\ ,0\leq i< k) 求出系数得到最终通解。

2.2.1 常用的非齐次递推式的求解1(ing)

f(n)=f(n-1)+g(n) \: \: \: (n\geq 1)\: \: \: \: \: AND \: f(0)=0

2.2.2 常用的非齐次递推式的求解2(ing)

二、递归树

用递归树求解递归方程的基本过程是:   

(1)展开递归方程,构造对应的递归树。   

(2)把每一层的时间进行求和,从而得到算法时间复杂度的估计。

三、主方法

主方法(master method)提供了解如下形式递归方程的一般方法:

          T(n)=aT(n/b)+f(n)

其中a≥1,b>1为常数

该方程描述了算法的执行时间,算法将规模为n的问题分解成a个子问题,每个子问题的大小为n/b。例如,对于递归方程T(n)=3T(n/4)+n^2,有:a=3, b=4, f(n)=n^2

3.1 主定理

 应用该定理的过程是,首先把函数f(n)与函数进行比较,递归方程的解由这两个函数中较大的一个决定:

  • 情况(1),函数n^{log_ba}比函数f(n)更大,则T(n)=O(n^{log_ba})
  • 情况(2),函数n^{log_ba}和函数f(n)一样大,则T(n)=O(n^{log_ba}log_2n)
  • 情况(3),函数n^{log_ba}比函数f(n)小,则T(n)=O(f(n))

3.2 应用实例


  • 29
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值