用递归树方法求解递归式

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用递归树方法求解递归式

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

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

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

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

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

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

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

  • 我们可以看到递归树的最上面那层,表示一开始的代价为cn2cn^2cn2,我们上面求出了结点为iii的时候,规模为:n4i\dfrac {n}{4^{i}}4in,我现在将其转为代价,结点为iii的时候,代价为 c(n4i)2c\left(\dfrac {n}{4^{i}}\right)^2c(4in)2,我们需要把结点数也算上,结点为iii时,有3i3^i3i个结点,最后乘起来,得到:
        3i⋅c(n4i)2=(316)icn23^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=0log4n(316)icn2T\left(n\right)=\sum ^{log_{4}n}_{i=0}\left(\dfrac {3}{16}\right)^{i}cn^{2}T(n)=i=0log4n(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值