求递归算法时间复杂度:递归树

求递归算法时间复杂度:递归树

1.参考资料

参考网页:求递归算法时间复杂度:递归树

2.内容

递归算法时间复杂度的计算方程式是一个递归方程:
T ( n ) = { O ( 1 ) n = 1 k T ( n / m ) + f ( n ) n > 1 T(n) = \left\{ \begin{array}{ll} O(1) & n=1 \\ k T(n / m)+f(n) & n>1 \end{array} \right. T(n)={O(1)kT(n/m)+f(n)n=1n>1
T ( n ) = 2 T ( n 2 ) + n 2 T(n) = 2T(\frac{n}{2})+n^{2} T(n)=2T(2n)+n2为例, K = 2 , m = 2 , f ( n ) = n 2 K=2, m=2, f(n)=n^2 K=2,m=2,f(n)=n2
则其对应的递归树是:
在这里插入图片描述
树高应该考虑迭代结束的条件: n 2 k = 1 , k = log ⁡ 2 ( n ) \frac{n}{2^{k}}=1,k=\log_2(n) 2kn=1,k=log2(n)
时间复杂度为所有节点和 n 2 + 1 2 n 2 + 1 4 n 2 + ⋯ = 2 n 2 = O ( n 2 ) n^2+\frac{1}{2}n^2+\frac{1}{4}n^2+\dots=2n^2=O(n^2) n2+21n2+41n2+=2n2=O(n2)

总结:递归树的规则是:

  1. 每层的节点为 k T ( n / m ) + f ( n ) k T(n / m)+f(n) kT(n/m)+f(n)中的 f ( n ) f(n) f(n)在当前 n m \frac{n}{m} mn下的值
  2. 每个节点的分支数为 k k k
  3. 可在当前层的右侧标出当前层中所有节点的和
    利用递归树分析解递归算法复杂度,可以得到一些一般结论:
    对递归式 f ( n ) = a f ( n b ) + d ( n ) f(n) = af(\frac{n}{b}) + d(n) f(n)=af(bn)+d(n)
    1.当 d ( n ) d(n) d(n)为常数时:
    f ( n ) = { O ( n log ⁡ b a ) a ≠ 1 O ( log ⁡ n ) a = 1 f(n)=\left\{\begin{array}{ll}O\left(n^{\log _{b} a}\right) & a \neq 1 \\ O(\log n) & a=1\end{array}\right. f(n)={O(nlogba)O(logn)a=1a=1
    2.当 d ( n ) = c n d(n) = cn d(n)=cn时:
    f ( n ) = { O ( n ) a < b O ( n log ⁡ n ) a = b O ( n log ⁡ b a ) a > b f(n)=\left\{\begin{array}{ll}O(n) & a<b \\ O(n \log n) & a=b \\ O\left(n^{\log _{b} a}\right) & a>b\end{array}\right. f(n)=O(n)O(nlogn)O(nlogba)a<ba=ba>b
    3.当 d ( n ) d(n) d(n)为其他情况可用递归树进行分析。
    由第二种情况知,若采用分治法对原算法进行改进,则重点是采用新的计算方法缩小a的值
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值