解决递归式的repertoire method

解决递归式是一个头疼的问题,即使是只求出在大O范围下的封闭解,
需要运用master定理,递归树等等,有时仍然无法解决。
在这里提出的方法并不是在大O意义下的,只是一个大家都很常用的求解递归式的方法。
例如求解递归式

f(1)f(2n)f(2n+1)=α=2f(n)+β   ,n1=2f(n)+γ   ,n1

很容易可以假设出
f(n)=A(n)α+B(n)β+C(n)γ

其中 A(n),B(n),C(n) 是只於 n 有关的函数。
我们可以随意假设出f(n)来求取 A(n),B(n),C(n)
首先假设 f(n)=n ,那么 α=1,β=0,γ=1
得到
A(n)+C(n)=n(1)

然后给 f(n) 一个常函数,例如 f(n)=1 ,
那么 α=1,β=1,γ=1
得到
A(n)B(n)C(n)=1(2)

还需要一个式子才能解出三个函数。
这时无论令 f(n) 为什么都不好做了。
那么我们可以观察原式。
发现如果令 f(n)=A(n) ,那么原式会变为
A(1)A(2n)A(2n+1)=1=2A(n)   ,n1=2A(n)   ,n1

可以直接使用归纳法解得 A(n)
A(n)=2m,n=2m+l(0l<2m)(3)

联立 (1)(2)(3) 式即可解得
A(n)B(n)C(n)=2m=2m1l=l

即可解得 f(n)
这种方法的思想就是待定系数法。
有时还需要敏锐的观察力和灵感。

注:我在一本书上发现了和上式形式相近的一类递归式通用的神奇解法,我会在仔细研究后发上来。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值