求解递归方程 使用代入法, 递归树方法,迭代法, 主方法(Substitution Method, Recursion Tree,Iteration Method, Master Theorem)

目录

如何求解T(N)=aT(N/b)+f(N)

方法1:代入法(Substitution Method)

代入法求解递归式分两步:

  • 猜测解的形式(猜测上界或下界)
  • 用数学归纳法求出解中的常数,并证明解的正确性

以mergeSort为例,T(N)=2T(N/2) + Θ(N),我们猜测其解为T(N)=O(NlogN)。带入法要求证明,恰当选择常数c>0,可有T(N)<=cNlogN。假设此上界对所有正数K<N都成立。假设 Θ ( N ) = a N \Theta(N)=aN Θ(N)=aN
当 K = N / 2 时 , 存 在 T ( N / 2 ) < = c ( N / 2 ) l o g ( N / 2 ) 当K=N/2时, 存在 T(N/2)<=c(N/2)log(N/2) K=N/2,T(N/2)<=c(N/2)log(N/2)
带 入 递 归 式 可 得 带入递归式可得
T ( N ) < = 2 T ( N / 2 ) + a N T(N)<= 2T(N/2) +aN T(N)<=2T(N/2)+aN
< = 2 [ c ( N / 2 ) l o g ( N / 2 ) ] + a N <= 2[c(N/2)log(N/2)]+aN <=2[c(N/2)log(N/2)]+aN
< = c N l o g ( N / 2 ) + a N <=cNlog(N/2) +aN <=cNlog(N/2)+aN
= c N l o g ( N ) − c N l o g ( 2 ) + a N =cNlog(N)-cNlog(2)+aN =cNlog(N)cNlog(2)+aN
= c N l o g ( N ) − c N + a N =cNlog(N)-cN+aN =cNlog(N)cN+aN
= c N l o g ( N ) + ( a − c ) N =cNlog(N)+(a-c)N =cNlog(N)+(ac)N
< = c N l o g ( N ) , 当 且 仅 当 c > = a <=cNlog(N) , 当且仅当c>=a <=cNlog(N),c>=a
根 据 B i g − O 定 理 , 可 得 T ( N ) = O ( N l o g ( N ) ) 根据Big-O定理,可得T(N)=O(Nlog(N)) BigOT(N)=O(Nlog(N))

方法2:递归树方法(Recursion Tree)

带入法虽然可以简洁的证明一个解是递归式的正确解,但猜测解的形式有时会比较困难。相比于代入法,递归树方法更加简单和直接。

在递归树中每一个节点表示一个单一子问题的代价,子问题对应某次递归函数的调用。我们将树中每层中的代价求和,得到每层的代价,然后将所有层的代价求和,得到所有递归调用的总代价。

以mergeSort为例:

  • T(N)=2T(N/2) + Θ ( N ) \Theta(N) Θ(N)
  • 假设 Θ ( N ) = a N \Theta(N)=aN Θ(N)=aN

《求解递归方程 使用代入法, 递归树方法,迭代法, 主方法(Substitution Method, Recursion Tree,Iteration Method, Master Theorem)》

  • 树的高度为logN
  • 每层代价为aN
  • 可得总代价=aN(logN)
  • 根据Big-O定理,可得T(N)=O(Nlog(N))

方法3: 迭代法(Iteration Method)

不断展开递归式。
仍以T(N)=2T(N/2) + Θ ( N ) \Theta(N) Θ(N)为例:
假 设 N = 2 k , k 是 整 数 假设 N=2^k ,k是整数 N=2k,k
T ( 2 k ) < = 2 T ( 2 k − 1 ) + a 2 k T(2^k)<=2T(2^{k-1})+a 2^k T(2k)<=2T(2k1)+a2k
2 T ( 2 k − 1 ) < = 4 T ( 2 k − 2 ) + 2 a 2 k − 1 2T(2^{k-1})<=4T(2^{k-2})+2 a 2^{k-1} 2T(2k1)<=4T(2k2)+2a2k1
4 T ( 2 k − 2 ) < = 8 T ( 2 k − 3 ) + 4 a 2 k − 2 4T(2^{k-2})<=8T(2^{k-3})+4 a 2^{k-2} 4T(2k2)<=8T(2k3)+4a2k2
. . . . . . . . . ……… .........
2 k − 1 T ( 2 1 ) < = 2 k T ( 2 0 ) + 2 k − 1 a 2 2^{k-1}T(2^1)<=2^{k}T(2^0)+2^{k-1}a 2 2k1T(21)<=2kT(20)+2k1a2
2 k − 1 T ( 2 ) < = 2 k T ( 1 ) + 2 k − 1 a 2 2^{k-1}T(2)<=2^{k}T(1)+2^{k-1}a 2 2k1T(2)<=2kT(1)+2k1a2
将 上 面 所 有 不 等 式 左 右 分 别 相 加 , 并 约 分 得 到 将上面所有不等式左右分别相加,并约分得到
T ( 2 k ) < = 2 k + k a 2 k T(2^k)<=2^k+ka2^k T(2k)<=2k+ka2k
因 为 2 k = N , 所 以 k = l o g N , 带 入 上 式 因为2^k=N, 所以 k=logN, 带入上式 2k=N,k=logN,
T ( N ) < = N + a N l o g N T(N) <=N+aNlogN T(N)<=N+aNlogN
根 据 B i g − O 定 理 , 可 得 T ( N ) = O ( N l o g ( N ) ) 根据Big-O定理,可得T(N)=O(Nlog(N)) BigOT(N)=O(Nlog(N))

方法4:主定理(Master Theorem)

《求解递归方程 使用代入法, 递归树方法,迭代法, 主方法(Substitution Method, Recursion Tree,Iteration Method, Master Theorem)》

其中a>=1,b>1是常数,f(N)是渐进正函数。为了使用主定理,需要牢记上述三种情况,可快速求解递归式。

例1:T(N)=3T(N/3)+ Θ ( 1 ) \Theta(1) Θ(1)

  • a=3, b=3, logba=log33=1
  • Θ ( N 1 ) \Theta(N^1) Θ(N1)大于 Θ ( 1 ) \Theta(1) Θ(1),所以分支占主导地位,选择case 1
  • 得到T(N)= Θ ( N ) \Theta(N) Θ(N)

例2:T(N)=2T(N/2)+ Θ ( N ) \Theta(N) Θ(N)

  • a=2, b=2, logb a=2/2=1
  • 相同增长率,选择case 2
  • 得到T(N)= Θ ( N l o g N ) \Theta(Nlog N) Θ(NlogN)

例3:T(N)=T(19N/20)+ Θ ( N ) \Theta(N) Θ(N)

  • a=1, b=20/19, logb a=log20/19 1=0
  • Θ ( N 0 ) \Theta(N^0) Θ(N0)小于 Θ ( N ) \Theta(N) Θ(N) Θ ( N ) \Theta(N) Θ(N)占主导地位,选择case 3
  • 得到T(N)= Θ ( N ) \Theta(N) Θ(N)
    原文作者:原始人抬头仰望星空
    原文地址: https://blog.csdn.net/weixin_47946295/article/details/122711604
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞