我正在尝试解决以下问题: T(n)= T(n / 3)+ T(n / 2)+ sqrt(n) 我目前做了以下工作但不确定我是否走在正确的轨道上:
K = log2(n),高度为2 ^ k,所以2 ^(log2(n))但是:
我不知道如何将2 ^(log2(n))的结果与sqrt(n)部分结合起来。
答案 0 :(得分:4)
一个很好的初步尝试是识别时间复杂度函数的上和下边界。这些是由:
给出的这两个函数比T(n)
本身更容易解决。考虑稍微更通用的功能:
我们什么时候停止递归?我们需要停止条件。由于没有给出,我们可以假设它是n = 1
而不失一般性(你希望看到如何)。因此,术语m
的数量由下式给出:
因此我们可以获得T(n)
的下限和上限:
我们能做得比这更好吗?即获得
n
和T(n)
之间的完全关系?
根据我之前的回答here,我们可以为T(n)
推导二项式求和公式:
其中
C
使得n = C
成为T(n)
的停止条件。如果没有给出,我们可以假设C = 1
而不失一般性。
在您的示例中,f(n) = sqrt(n), c1 = c2 = 1, a = 3, b = 2
。因此:
我们如何评估内部总和?考虑二项式展开的标准公式,正指数为m
:
因此,我们将x, y
替换为公式中的相应值,并获取:
我们使用标准几何系列公式和对数规则到达最后两步。请注意,指数与我们之前找到的边界一致。
确认关系的一些数值测试:
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
:
这样的情节m
的渐变是T(N) ∝ N^m
,我们看到m = 0.863
,它非常接近0.861
的理论值。