首先,正如菲利普所说,您的递归树是错误的。它最终并没有影响复杂性,但是你弄错了常量。
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' 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
如我们所愿。
可能看起来很无聊,但现在我可以确定我得到了正确的答案!