用递归树方法求解递归式

本文通过递归树方法详细解释了如何求解递归式T(n)=3T(n/4)+cn^2,分析了递归树的结构,推导了算法的时间复杂度为Θ(n^2)。通过将级和的log4n改为无穷大,得出最终的复杂度结果。
摘要由CSDN通过智能技术生成

用递归树方法求解递归式

[备注:需要修改]
一个递归算法的递归式 T ( n ) = 3 T ( n / 4 ) + c n 2 T\left(n\right)=3T\left(n/4\right)+cn^2 T(n)=3T(n/4)+cn2

我们先来了解一下这个递归式什么意思:

  • 3 3 3 表示我们将一个问题分解为 3 3 3个子问题;
  • n / 4 n/4 n/4 则表明每个子问题的规模是原问题的 1 / 4 1/4 1/4
  • T ( ) T\left(\right) T() 表明的为递归形式;
  • c n 2 cn^2 cn2 表明为合并需要的时间,其中 c c c为常数系数 c > 0 c>0 c>0。其实也就是算法度 Θ ( n 2 ) Θ\left(n^2\right) Θ(n2)

好嘞~,现在来看递归树:
在这里插入图片描述
我们可以从上图中得出:

  • 该树的长度为: l o g 4 n log_{4}n log4n。理由为:
        原本问题的规模为 n n n,到了树的最底层,则为 1 1 1了,也就是说,每往下一层,则规模为 1 / 4 1/4 1/4,我们假设它除去了 i i i 4 4 4 i i i个结点),也就是说, n ÷ 4 1 ÷ 4 2 ÷ . . ÷ 4 i = 1 n\div4_{1}\div4_{2}\div..\div4_{i}=1 n÷41÷42÷..÷4i=1,换个思维,可以说是: 4 i = n 4^i=n 4i=n,换算一下也就是 i = l o g 4 n i=log_{4}n i=log4n

  • 每往下一层,其子问题得规模为原问题 1 / 4 1/4 1/4,也可以说是根据其结点,也就是结点每往下一层,其规模减少 1 / 4 1/4 1/4,我们设置结点为 i i i,就可以得到第 i i i层的规模将减少至原规模的 1 4 i \dfrac {1}{4^{i}} 4i1,又因为 n n n为原规模,所以可以得出:
        当结点为 i i i的时候,得出规模为: n 4 i \dfrac {n}{4^{i}} 4in

  • 每层的节点数都是上层的 3 3 3倍,所以,当结点为 i i i时,因此深度为 i i i的结点数为 3 i 3^i 3i

  • 我们可以看到递归树的最上面那层,表示一开始的代价为 c n 2 cn^2 cn2,我们上面求出了结点为 i i i的时候,规模为: n 4 i \dfrac {n}{4^{i}} 4in,我现在将其转为代价,结点为 i i i的时候,代价为 c ( n 4 i ) 2 c\left(\dfrac {n}{4^{i}}\right)^2 c(4in)2,我们需要把结点数也算上,结点为 i i i时,有 3 i 3^i 3i个结点,最后乘起来,得到:
         3 i ⋅ c ( n 4 i ) 2 = ( 3 16 ) i c n 2 3^i\cdot c\left(\dfrac {n}{4^{i}}\right)^2=\left(\dfrac {3}{16}\right)^{i}cn^{2} 3ic(4in)2=(163)icn2

现在我们可以用级和去求总代价:

     T ( n ) = ∑ i = 0 l o g 4 n ( 3 16 ) i c n 2 T\left(n\right)=\sum ^{log_{4}n}_{i=0}\left(\dfrac {3}{16}\right)^{i}cn^{2} T(n)=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值