大O O ^(lg3)中的Karatsuba算法通过替换证明

时间:2013-11-02 17:09:14

标签: algorithm recursion big-o substitution

Karatsuba算法涉及递归关系T(n) = 3T(n/2) + n

通过递归树方法,我们可以将T的大O近似为O(nlog23)

然而,通过替换方法我无法验证递归树方法找到的近似结果

我只需使用lg 3来表示log23

替代方法:

Hypothesis -> T(n) <= cnlg 3 where c is a positive constant
Proof -> T(n) <= 3c(n/2)lg 3 + n
                  =  cnlg 3 + n

但证据的第2步显示我无法证明我的假设是因为n个术语。

我修改了证明的第2步

T(n) <= cnlg 3 + nlg 3
      = (c+1)nlg 3

后来意识到我犯了一个错误,因为这个假设没有得到证实。

必须证明

T(n) <= cnlg 3,而不是T(n) <= (c+1)nlg 3

但答案是T(n)O(nlg 3)

1 个答案:

答案 0 :(得分:2)

当使用替代方法时,你有时必须加强归纳假设,并猜测一种更复杂的表达形式,这种形式是复发的上限。

尝试猜测形式T(n)≤c 0 n lg 3 - c 1 n。现在您要减去c 1 n形式的某个项,您可以通过使用一些线性项来抵消稍后添加的n项,从而使重复计算成功。

例如:

  

T(n)≤3T(n / 2)+ n

     

≤3(c 0 (n / 2) lg 3 - c 1 (n / 2))+ n

     

= 3(c 0 (n / 2) lg 3 ) - 3c 1 n / 2 + n

现在,选择c 1 ,使-3c 1 n / 2 + n = -c 1 n。这解决了

  

-3c 1 n / 2 + n = -c 1 n

     

-3c 1 / 2 + 1 = -c 1

     

-3c 1 + 2 = -2c 1

     

2 = c 1

这个c 1 的选择将让你成功取消+ n项,让归纳成功。

希望这有帮助!