在 T(n) = T(n/2) + n 上应用主定理

Posted

技术标签:

【中文标题】在 T(n) = T(n/2) + n 上应用主定理【英文标题】:Apply master theorem on T(n) = T(n/2) + n 【发布时间】:2014-09-18 18:47:50 【问题描述】:

我只是在尝试掌握 Master Theorem,在尝试评估 T(n) = T(n/2) + n 时有点困惑。使用主定理,答案的计算结果为 O(n)。

但只需通过以下代码:

fun(n)

    if(n == 1)
        return ;
    for(int i=1;i<=n;i++)
    
        printf("*");
    
    fun(n/2);

上述代码的递归方程为 T(n) = T(n/2) + n。因此上述程序的时间复杂度必须为 O(n)。

但如果你从逻辑上思考,程序运行的次数是: n+n/2+n/4+n/8+...... = nlogn。 因此,从逻辑上讲,上述程序的时间复杂度必须是 O(nlogn)。

我现在很困惑。有人可以帮我看看我哪里弄错了吗?

【问题讨论】:

【参考方案1】:

不,该系列的计算结果为 2n。

n+n/2+n/4+n/8+...... = 2n

但是如果你有 T(n) = 2T(n/2) + n,那么它将是 O(n log n)

【讨论】:

哦..是的..明白了..我和另一个系列混淆了..评估为登录。非常感谢!!

以上是关于在 T(n) = T(n/2) + n 上应用主定理的主要内容,如果未能解决你的问题,请参考以下文章

大师方法——为啥不能解决T(n) = T(n/2) + n^2/logn?

求解递归 T(n) = T(n/2) + lg n? [关闭]

T(n-1) 的时间复杂度

递归关系:T(n) = T(n/2) + n

T(n) = T(n-1) + 10/n [关闭]

T(n) = 2T(n/2) + n lg lg n 的渐近上限和下限是多少?