递归算法时间复杂度_递归树

递归算法时间复杂度_递归树


        递归算法时间复杂度的计算方程式一个递归方程:

  



  在引入递归树之前可以考虑一个例子:

  T(n) = 2T(n/2) + n2

  迭代2次可以得:

  T(n) = n2 + 2(2T(n/4) + (n/2) 2)

  还可以继续迭代,将其完全展开可得:

  T(n) = n2 + 2((n/2) 2 + 2((n/22)2 + 2((n/23) 2 + 2((n/24) 2 +…+2((n/2i) 2 + 2T(n/2i + 1)))…))))  ……(1)

  而当n/2i+1 == 1时,迭代结束。

 

  将(1)式小括号展开,可得:

  T(n) = n2 + 2(n/2)2 + 22(n/22) 2 + … + 2i(n/2i)2 + 2i+1T(n/2i+1)

  这恰好是一个树形结构,由此可引出递归树法。

 

  图中的(a)(b)(c)(d)分别是递归树生成的第1,2,3,n步。每一节点中都将当前的自由项n2留在其中,而将两个递归项T(n/2) + T(n/2)分别摊给了他的两个子节点,如此循环。

  图中所有节点之和为:

  [1 + 1/2 + (1/2)2 + (1/2)3 + … + (1/2)i] n2 = 2n2

  可知其时间复杂度为O(n2)

  


  可以得到递归树的规则为:

  (1) 每层的节点为T(n) = kT(n / m) + f(n)中的f(n)在当前的n/m下的值;

  (2) 每个节点的分支数为k;

  (3)每层的右侧标出当前层中所有节点的和。

 


  再举个例子:

  T(n) = T(n/3) + T(2n/3) + n

  其递归树如下图所示:

  

  可见每层的值都为n,从根到叶节点的最长路径是:

  

  因为最后递归的停止是在(2/3)kn == 1.则

      

  于是

    

  即T(n) = O(nlogn) 

 


  总结,利用此方法解递归算法复杂度:

  f(n) = af(n/b) + d(n)

  1.当d(n)为常数时:

  

  2.当d(n) = cn 时:

   

  3.当d(n)为其他情况时可用递归树进行分析。

  

  由第二种情况知,若采用分治法对原算法进行改进,则着重点是采用新的计算方法缩小a值。  


原文链接:http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html#top

参考:http://blog.youkuaiyun.com/metasearch/article/details/4428865


### 回答1: 时间复杂度的求解取决于实际的算法,一般可以分析算法的执行步骤,统计每个步骤所用的时间,从而求得时间复杂度。对于递归式算法,可以通过分析递归函数的执行次数,以及每次调用递归函数所消耗的时间,来求解时间复杂度。 ### 回答2: 要求解递归式时间复杂度,我们可以按照以下步骤进行: 1. 首先,确定递归式的形式。递推式通常具有递归的特点,即问题的规模需要通过不断缩小来递归求解。例如,递归式可能包含递归调用,或者具有递归的结构。 2. 其次,推导递归式递归深度。递归时间复杂度通常与递归的深度相关,即需要确定递归式递归深度。 3. 然后,分析递归函数的时间代价。将递归式的执行过程分解为不同的子问题,确定每个子问题的时间代价。这可能涉及到递归子问题的规模和计算时间。 4. 最后,通过递归时间代价和递归式递归深度来确定递归式时间复杂度。 需要注意的是,递归式时间复杂度可能与递归的规模有关,也可能与递归的深度有关,具体取决于具体的情况和问题的性质。同时,递归式时间复杂度也可能需要通过数学推导或递归树等方法进行求解。 总的来说,求解递归式时间复杂度需要通过对递归的分析、递归深度的确定以及递归函数的时间代价的分析来进行。 ### 回答3: 求解递归式时间复杂度需要以下步骤: 1. 确定递归式的形式:首先,我们需要确定递归式的形式和递归方程,即描述递归的基本操作和递归关系的数学等式。这通常需要根据问题的特点和递归的实现进行分析。 2. 求解递归方程:接下来,我们需要求解递归方程,即找到递归式的解析解。这可以通过代入法、特征根法或母函数法等数学方法来实现。在这一步骤中,我们可以得到递归式的通项公式,并进一步进行化简。 3. 分析递归时间复杂度:一旦我们得到递归式的通项公式,我们可以通过分析公式的增长率来确定递归时间复杂度。具体来说,我们可以评估递归式中的递归调用次数和每次递归操作的时间复杂度,然后将它们相乘得到最终的时间复杂度。 4. 解决递归的边界条件:最后,我们需要解决递归的边界条件,即递归的终止条件。这是因为递归式只有在满足终止条件时才能收敛,否则递归会无限进行下去。在分析时间复杂度时,我们需要考虑递归的基本操作在边界条件下的执行次数和时间复杂度。 需要注意的是,求解递归式时间复杂度可能涉及到数学推理和推导,需要运用到数学分析的方法。具体的求解过程会根据不同的递归式和问题而有所不同。同时,我们也可以借助工具和数值计算对递归式进行近似求解,以便更好地估计时间复杂度的上界和下界。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值