来自http://qpleple.com/divide-and-conquer/的问题 算法比较
您是Facebook的产品经理,来自您团队的三位工程师提出了这三种算法来检测n = 10亿Facebook帐户列表中的虚假Facebook帐户。
Rakesh通过将问题分成五个半问题,解决每个子问题,然后在线性时间内组合解决方案来解决问题。
Chris通过递归求解大小为n-1的两个子问题然后在恒定时间内组合解决方案来解决大小为n的问题。
Matus解决了大小为n的问题,将它们分成九个大小为
n/3
的子问题,递归地解决每个子问题,然后在O(n²)
时间内组合解决方案
因此,通过使用主定理我发现:
O(nlog₂(5))
O(n2log(n))
绘制递归树并使用:
Rasket的算法有:
#levels = log₂(n) #of nodes at level k = 5k overhead per node at level k = n/2k
但无论我怎么努力,我都无法将总和等于O(nlog₂(5))
,而Matus的算法也是如此。
另外,有没有办法解决Chris'算法与主定理?
答案 0 :(得分:0)
申请
#levels = log₂(n) #of nodes at level k = 5k overhead per node at level k = n/2k
到
你得到(使用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)
。