递归式的渐进界求解——《算法导论》

递归式就是一个等式或者不等式,它通过更小的输入上的函数值来描述一个函数。
那么如何求得递归算法的“O”和”Θ”渐进界呢?如果我们能够求解出递归式的”O”和”Θ”渐进界,我们就可以分析哪些问题使用递归算法是否合理。

求解递归式的三种方法:

  • 1.代入法 : 自己猜测一个界,然后用数学归纳法进行验证是否正确
  • 2.递归树法 :将递归式转换为一棵树,其结点表示不同层次的递归调用产生的代价。然后采用边界和技术来求解递归式。
  • 3.主方法 :可求解形如下面公式的递归式的界:
    T( n ) = aT( a/b ) + f(n)
    其中a>=1,b>1,f(n)是一个给定的函数。这种形式的递归式很常见,它刻画了这样的一个问题:生成a个子问题,每个子问题的规模是元问题规模的1/b,分解和合并步骤总共花费时间为f(n)。

用代入法求解递归式

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

  • 1.猜测解的形式。
  • 2.用数学归纳法求出解中的常数,并证明解释正确的。

当将归纳假设应用于较小的值时,我们将猜测的解带入函数,因此为”代入法“。这种方法使我们必须猜出解的形式。一般靠经验来猜。
一种方法是通过熟悉的递归式猜需要求解的递归式。
另外一种方法是先证明递归式较松的上界和下界,然后缩小不确定的范围。


用递归树方法求解递归式

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


用主方法求解递归式

主方法为如下形式的递归式提供一种“菜谱”式的求解方法:T( n ) = aT( a/b ) + f(n) , 其中a>=1,b>1,f(n)为渐进正函数。
描述的是这样的一种算法的运行时间:它将规模为n的问题分解为a个子问题,每个子问题规模为n/b,其中a和b都是正常数。a个子问题递归地进行求解,每个花费时间T(n/b)。函数f(n)包含了问题分解和子问题解合并的代价。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值