关系的时间复杂度 T(n) = T(n-1) + T(n/2) + n

Posted

技术标签:

【中文标题】关系的时间复杂度 T(n) = T(n-1) + T(n/2) + n【英文标题】:time complexity of relation T(n) = T(n-1) + T(n/2) + n 【发布时间】:2015-08-04 19:23:24 【问题描述】:

关系

T(n) = T(n-1) + T(n/2) + n

我可以先解出得到 O(n^2) 的项 (T(n-1) + n),然后解出 T(n/2) + O(n^2) 项吗?

根据同样给出 O(n ^ 2) 的主定理还是错了?

【问题讨论】:

如果您对复杂性有“猜测”,您总能做的一件事是尝试使用归纳法直接证明事物。如果您的猜测错误,这种方法可能无法帮助您找到正确的解决方案,但如果您的猜测正确,那么您无需记住任何特殊方法即可获得所需的证明 【参考方案1】:

不,您无法使用 Mater-theorem 解决它。

您需要使用Akra–Bazzi method 来解决它,这是著名的主定理的更简洁的概括。

    主定理假设子问题的大小相等。

    主定理涉及形式的递归关系

T(n) = a T(n/b) + f(n) ,其中 a>=1,b>1。


我不是在这里推导出解决方案的步骤,以便您解决问题。如果您在解决相同问题时还有其他问题,请在下面发表评论。祝你好运...

【讨论】:

【参考方案2】:

我认为您的方法在一般情况下是不正确的。当你抛弃 T(n/2) 项来计算 T(n-1) 项的复杂度时,你最终会低估 T(n-1) 项的大小。

举个具体的反例:

 T(n) = T(n-1) + T(n-2) + 1

您的技术也将为此提出 T(n) = O(n^2),但真正的复杂性是指数级的。

【讨论】:

以上是关于关系的时间复杂度 T(n) = T(n-1) + T(n/2) + n的主要内容,如果未能解决你的问题,请参考以下文章

递归的复杂度:T(n) = T(n-1) + T(n-2) + C

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

求解递归关系 T(n) = T(n-√n)+1

递归关系:求解 T(n-1) 的大 O

求解递归关系T(n)= T(n-1)+ n

将以下递归算法的时间复杂度 T(n) 表示为递归方程: