我有以下递归:
T(n) = T(2*n / 3) + T(n / 3) + O(n log n)
我需要知道确切的等式,我知道Master定理不会帮助我。
请告诉我如何进行此类递归。我需要复杂性并理解如何解决这些问题。
提前致谢。
答案 0 :(得分:1)
您可以使用简化来获得上限。
<强> 1。方式:
T(n) = T(2/3 ⋅ n) + T(1/3 ⋅ n) + O(n log n)
≤ T(2/3 ⋅ n) + T(2/3 ⋅ n) + O(n log n)
= 2 T(2/3 ⋅ n) + O(n log n)
现在你可以使用主定理。这应该给你O( n1.7095 )
。由于我们有≤
,我们确实有O
而不是Θ
。
<强> 2。方式:强>
你可以计算&#39;调用树中的节点,在您的情况下是二叉树。此树具有最大深度log3/2(n)
,因此它具有少于2O(log n) = O(n)
个节点。每个节点都有一个O(n log n)
,因此总共得到O(n) ⋅ O(n log n) = O(n² log n)
。
当然,这非常难以理解。如果我们将树分成两部分,我们可以做得更好:
1/2 ⋅ log n
:O(21/2 ⋅ log n ) = O( sqrt(n) )
个节点深度以上的上半部分。
此节点的权重为O(n log n)
。1/2 ⋅ log n
:O(2log n - sqrt(n) ) = O(n)
个节点深度的部分。
此节点的权重为O(sqrt(n) log n)
总得到:T(n) = O(sqrt(n)) ⋅ O(n log n) + O(n) ⋅ O(sqrt(n) log n) = O(n1.5 log n)
。
我希望这会有所帮助。
编辑:O(n1.5 log n) ⊂ O(n1.7095)
。
编辑:您可以将O(n1.5 log n)
写为O(n⋅sqrt(n)⋅log n)
。正如@Teepeemm所示,确切的复杂性为Θ(n log²(n))
,通过将因子sqrt(n)
替换为log(n)
来改善我所显示的上限。
答案 1 :(得分:1)
主定理的推广是Akra-Bazzi method。
假设你的O(n log n)实际上是Θ(n log n),我们有g(x)= x log x,a i = 1 i = 1且i = 2,b 1 = 2/3,b 2 = 1/3。然后b 1 p + b 2 p = 1当p = 1,g(u)/ u < sup> p + 1 =(log u)/ u有积分(log²u)/ 2,T(x)是Θ(xlog²x)。