如何确定在处理重复运行时构建的递归树的高度?它与确定常规树的高度有何不同?
alt text http://homepages.ius.edu/rwisman/C455/html/notes/Chapter4/ch4-9.gif
编辑:对不起,我的意思是添加如何从递归关系中获取递归树的高度。
答案 0 :(得分:7)
如果递归的形式为T(n)= aT(n / b)+ f(n),则树的深度为n的对数基数b。
例如,2T(n / 2)+ n重复将具有深度为lg(n)的树(n的对数基数为2)。
答案 1 :(得分:2)
首先,如果这是一个家庭作业问题,请将其标记为。您链接的图像暗示您与CS 455一起,与Wisman教授合作。 :)
我将给出的主要提示是:树的高度显然取决于你何时到达“树叶”。建模函数递归关系的树叶是基本情况。因此,我希望看到N能够“快速”收缩到基本情况。
答案 2 :(得分:1)
递归树的高度取决于所讨论的递归算法。并非所有的分而治之算法都具有均匀的高度树,就像并非所有树结构都具有统一的高度一样。如果无法确定算法的最大可能高度,或者需要在运行时计算树的实际高度,则可以对递归函数使用变量global,在函数入口时递增,并递减它在功能退出。此变量将指示递归过程的当前级别。如有必要,您可以在第二个变量中保持此变量的最大值。
答案 3 :(得分:1)
任何树的深度是从节点到树根节点的最小边数。根节点的深度为0.
考虑递归T(n)= aT(n / b)它导致以下递归树
很明显树的深度是$ \ log_b n $深度与树的高度相同。
答案 4 :(得分:0)
什么,对您来说不是很明显? ;)这是一个很大的问题,如果除了人们喜欢挥手以外没有其他原因的话。但是,实践证明这一点确实很明显。
以下是根据Cormen等人的“算法简介”第4.4节中的示例进行的说明。
考虑T(n) = 3T(n/4) + cn^2
。该关系表明大小为n
的问题(例如数组)的时间复杂度。记住n
代表什么很重要。由于复杂度T是根据T定义的,因此它是递归关系。
如果高度不明显,我们可以遵循Polya的建议并尝试使用直接推理,绘制图片或解决一些相关问题。我们可以通过直接在T出现的任何地方插入T的右手表达式来使用直接推理,
T(n) = 3T(n/4) + cn^2
= 3[3T( (n/4)/4 ) + c(n/4)^2] + cn^2
= 9T(n/16) + c(n/4)^2 + cn^2
= 9[3T( (n/16)/4 ) + c(n/16)^2] + c(n/4)^2 + cn^2
= 27T(n/64) + c(n/16)^2 + c(n/4)^2 + cn^2
...
绘制图片会生成一棵树。每次递归都会为每个孩子产生三个分支:
Initial pass
____cn^2____
/ | \
/ | \
T(n/4) T(n/4) T(n/4)
First recursion
____cn^2____
/ | \
/ | \
cn(n/4)^2 cn(n/4)^2 cn(n/4)^2
/ | \ / | \ / | \
T(n/16) ... T(n/16)
.
...on down
____cn^2____
/ | \
/ | \
cn(n/4)^2 cn(n/4)^2 cn(n/4)^2
/ | \ / | \ / | \
T(n/16) ... T(n/16)
.
.
.
T(1) ... ... T(1)
到底是什么?
请记住,n
是原始问题的大小(例如,数组中的元素数) 1 。这限制可能发生的递归次数。 边界条件将取决于递归发生的情况。对于数组,您可以想象递归会一直持续到仅剩一个元素为止。这将在T(1)发生。
边界如何与高度相关?
对我来说,巨大的启示是意识到树的高度与达到边界的高度相同。这就是波利亚(Polya)谈论的“相关问题”。我们可以将问题改写为
树在什么级别达到边界条件?
查看关系或树,请注意如何将n/4
反复插入连续的递归中。这意味着子问题大小(其中n
是原始问题大小)在第n/4^i
级是i
。在边界处,子问题的大小为1:
n/4^i = 1
log_4(n/4^i) = log_4(1)
log_4(n) - log_4(4^i) = 0
log_4(n) = log_4(4^i)
log_4(n) = i
最后一个等式告诉我们,树在i = log_4(n)
时达到边界条件。由于树的高度是满足边界条件的级别,因此树的高度为log_4(n)
。
从这里开始,只需简单地得出@ejel给出的结论
如果T(n)= aT(n / b)+ f(n),则树的深度为对数的对数b
@xpda指出,递归树的高度将取决于算法。一种可能概括的结论是考虑算法在边界处的行为。
1 单词“问题”可能以不同的方式使用。首先,它可能意味着“手头的任务”,例如找到递归树的高度。但是,由于树是通过递归产生的,因此该问题以类似的形式(即子树)再次出现,因此“问题”的含义是“正在操作的集合的大小”,例如数组中元素的数量。>