【发布时间】:2020-12-25 12:09:20
【问题描述】:
我无法解决问题。我终于想通了,答案是什么。
【问题讨论】:
-
我投票结束这个问题,因为它是一个数学问题,而不是一个计算机编程问题。
-
@RaymondChen 但是,我们在 StackOverflow 上有很多时间复杂度问题,它们可能是相关的。
标签: algorithm time-complexity divide-and-conquer
我无法解决问题。我终于想通了,答案是什么。
【问题讨论】:
标签: algorithm time-complexity divide-and-conquer
你可以改写如下等式:
T(n) = T(n/(4/3)) + 2T(n/2) + n
现在是4/3 < 2,我们可以说T(n) < 3 T(n/(4/3)) + n。然后使用主定理,T(n) = O(n^{log_{4/3}(3)}) = O(n^{3.82})。另一方面,我们可以找到一个下限为T(n) > 3T(n/2) + n,T(n) = Omega(n^{log_2(3)})=Omega(n^{1.58})。
要找到确切的解决方案,您也可以使用Akra-Bazzi Theorem:
a1 = 1, b1 = 3/4
a2 = 2, b2 = 1/2
找到p 这样:
(3/4)^p + 2 (1/2)^p = 1
p ~ 2.17。所以,T(n) = \Theta(n^{2.17} * (1 + int(u/u^{3.17},1,n)) ) = Theta(n^{2.17})(如int(u/u^{3.17},1,n) = int(1/u^{2.17},1,n) = O(1))。
总之:
T(n) = Theta(n^{2.17})
【讨论】: