解决以下重现:T(n)= T(n / 3)+ T(n / 2)+ sqrt(n)

时间:2017-09-04 19:26:25

标签: algorithm recursion data-structures big-o

我正在尝试解决以下问题: T(n)= T(n / 3)+ T(n / 2)+ sqrt(n) 我目前做了以下工作但不确定我是否走在正确的轨道上:

  1. T(n)< = 2T(n / 2)+ sqrt(n)
  2. T(n)< = 4T(n / 4)+ sqrt(n / 2)+ sqrt(n)
  3. T(n)< = 8T(n / 8)+ sqrt(n / 4)+ sqrt(n / 2)+ sqrt(n)
  4. 所以,n /(2 ^ k)= 1,并且sqrt部分简化为:(a(1-r ^ n))/(1-r)
  5. K = log2(n),高度为2 ^ k,所以2 ^(log2(n))但是:

    我不知道如何将2 ^(log2(n))的结果与sqrt(n)部分结合起来。

1 个答案:

答案 0 :(得分:4)

一个很好的初步尝试是识别时间复杂度函数的边界。这些是由:

给出的

enter image description here

这两个函数比T(n)本身更容易解决。考虑稍微更通用的功能:

enter image description here

我们什么时候停止递归?我们需要停止条件。由于没有给出,我们可以假设它是n = 1而不失一般性(你希望看到如何)。因此,术语m的数量由下式给出:

enter image description here

因此我们可以获得T(n)的下限和上限:

enter image description here

  

我们能做得比这更好吗?即获得nT(n)之间的完全关系?

根据我之前的回答here,我们可以为T(n)推导二项式求和公式:

enter image description here

其中

enter image description here

C使得n = C成为T(n)的停止条件。如果没有给出,我们可以假设C = 1而不失一般性。

在您的示例中,f(n) = sqrt(n), c1 = c2 = 1, a = 3, b = 2。因此:

enter image description here

我们如何评估内部总和?考虑二项式展开的标准公式,正指数为m

enter image description here

因此,我们将x, y替换为公式中的相应值,并获取:

enter image description here

我们使用标准几何系列公式和对数规则到达最后两步。请注意,指数与我们之前找到的边界一致。

确认关系的一些数值测试:

N       T(N)
--------------------
500000  118537.6226
550000  121572.4712
600000  135160.4025
650000  141671.5369
700000  149696.4756
750000  165645.2079
800000  168368.1888
850000  181528.6266
900000  185899.2682
950000  191220.0292
1000000 204493.2952

log T(N)针对log N

的情节

enter image description here

这样的情节m的渐变是T(N) ∝ N^m,我们看到m = 0.863,它非常接近0.861的理论值。