使用递归树的Big O表示法分析

时间:2015-04-09 06:56:44

标签: recursion big-o complexity-theory recurrence divide-and-conquer

来自http://qpleple.com/divide-and-conquer/的问题 算法比较

  

您是Facebook的产品经理,来自您团队的三位工程师提出了这三种算法来检测n = 10亿Facebook帐户列表中的虚假Facebook帐户。

     

Rakesh通过将问题分成五个半问题,解决每个子问题,然后在线性时间内组合解决方案来解决问题。

     

Chris通过递归求解大小为n-1的两个子问题然后在恒定时间内组合解决方案来解决大小为n的问题。

     

Matus解决了大小为n的问题,将它们分成九个大小为n/3的子问题,递归地解决每个子问题,然后在O(n²)时间内组合解决方案

因此,通过使用主定理我发现:

  • Rakesh的算法的运行时间为O(nlog₂(5))
  • 的Matus'算法的运行时间为O(n2log(n))

绘制递归树并使用:
equation

Rasket的算法有:

 #levels = log₂(n) 
 #of nodes at level k = 5k
 overhead per node at level k = n/2k

但无论我怎么努力,我都无法将总和等于O(nlog₂(5)),而Matus的算法也是如此。

另外,有没有办法解决Chris'算法与主定理?

1 个答案:

答案 0 :(得分:0)

申请

#levels = log₂(n)
#of nodes at level k = 5k
overhead per node at level k = n/2k

Equation

你得到(使用geometric formula

T(n) = Σk=0,...,log₂(n) 5k ⋅ n/2k
     = n ⋅ Σk=0,...,log₂(n) (5/2)k
     = n ⋅ (1 - (5/2)log₂(n)+1) / (1 - 5/2)
     = (n - n ⋅ (5/2) ⋅ 5log₂(n) / 2log₂(n)) / (1 - 5/2)
     = (n - n ⋅ (5/2) ⋅ 5log₂(n) / n) / (1 - 5/2)
     = (n - (5/2) ⋅ 5log₂(n)) / (1 - 5/2)
     = ((5/2) ⋅ 5log₂(n) - n) / (5/2 - 1)
     = ((5/2) ⋅ 5log₂(n) - n) / (3/2)
     = (5/3) ⋅ 5log₂(n) - (2/3) ⋅ n             ∈ Θ(5log₂(n))

现在你只需要显示5log₂(n) = nlog₂(5),这可以在一行中完成。

我得到克里斯的复发方程式

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

使用主定理无法解决这个问题,但您可以将它扩展为求和并求解:

T(n) = 2⋅T(n-1) + Θ(1)
     = 2⋅(2⋅T(n-2)+ Θ(1)) + Θ(1)
     = 2²⋅T(n-2) + 2⋅Θ(1) + Θ(1)
     ...
     = 2n⋅T(1) + 2n-1⋅Θ(1) + ... + 2⋅Θ(1) + Θ(1)
     = 2n+1⋅Θ(1) - 1         ∈ Θ(2n)

适用于T(1) ∈ Θ(1)