我有这个练习:
“使用递归树来确定递归T(n)= T(n / 2)+ n ^ 2的良好渐近上界。使用替换方法验证您的答案”
我制作了这个递归树
我认为k - >无穷大(在我的书中,当T中的输入变为1时,他们经常会停止重复,但我不认为是这种情况,当我没有其他信息时)。
我的结论是:
当我使用替换方法时,我假设T(n)= O(n ^ 2)
然后完成以下步骤:
当n> 0且c> 0时,我发现以下情况适用于某些选择c
因此T(n)<= cn ^ 2
我的问题是:“这是正确的做法吗?”
答案 0 :(得分:2)
首先,正如菲利普所说,你的递归树是错误的。它最终并没有影响复杂性,但你得到的常数是错误的。
T(n) becomes
n^2 + T(n/2) becomes
n^2 + n^2/4 + T(n/4) becomes
...
n^2(1 + 1/4 + 1/16 + ...)
在一个地方停留在无限远地区,主要是品味和选择更方便的事情。在这种情况下,我会像你一样做,并使用无限和,因为我们可以使用几何系列公式来得到T(n) <= (4/3)n^2
唯一困扰我的是,你的证据最终倾向于非正式的。很容易迷失在非正式的证据中,所以如果我必须对你的作业进行评分,我会通过感应更加舒适,如下所示:
声明
We wish to prove that T(n) <= (4/3)*n^2, for n >= 1
c 和 n0 的具体值使证明更加可信,所以如果可以,请将它们放入。通常你需要运行一次证明才能找到值,然后回来把它们放进去,就好像你已经知道它们一样:)在这种情况下,我希望我的4/3猜测来自递归树结果正确。
通过归纳证明:
基本情况(n = 1):
T(1) = 1
(你没有明确表示T(1)的值,但我想这应该是在原来的练习中)
T(1) = 1
<= 4/3
= (4/3)*1^2
T(1) <= (4/3)*1^2
正如我们想要的那样。
归纳案例(n> 1):
(这里我们假设所有n'&lt; n)的归纳假设T(n') <= 4/3*(n')^2
我们知道
T(n) = n^2 + T(n/2)
归纳假设:
T(n) <= n^2 + (4/3)(n/2)^2
做一些代数:
T(n) <= n^2 + (4/3)(n/2)^2
= n^2 + (1/3)n^2
= (4/3)n^2
T(n) <= (4/3)*n^2
正如我们想要的那样。
答案 1 :(得分:1)
您的递归树是错误的。它应该是这样的:
N ^ 2
|
(N / 2)^ 2
|
(N / 4)^ 2
|
...
|
(N / 2 ^ k)的^ 2
一旦T达到1,你就可以安全地停止,因为你通常计算离散的“步数”,并且没有“0.34步”这样的东西。
由于您在每次迭代中将n
除以2
,因此k
等于log2(n)
。