[英]Solving the recurrence T(n) = T(n / 3) + T(2n / 3) + n^2?
我一直试图解决复发关系。
复发是T(n) = T(n/3)+T(2n/3)+n^2
我解决了复发n
我得到它为T(n)=nT(1)+ [ (9/5)(n^2)( (5/9)^(log n) ) ]
谁能告诉我这个表达式的运行时间?
我认为这种复发可以达到Θ(n 2 )。 为了看到这一点,我们将证明T(n)=Ω(n 2 )并且T(n)= O(n 2 )。
显示T(n)=Ω(n 2 )非常简单 - 因为T(n)中有一个n 2项,它肯定是Ω(n 2 )。
现在让我们说明T(n)= O(n 2 )。 我们有
T(n)= T(n / 3)+ T(2n / 3)+ n 2
考虑另一个重复:
S(n)= S(2n / 3)+ S(2n / 3)+ n 2 = 2S(2n / 3)+ n 2
由于T(n)增加且T(n)≤S(n),因此S(n)的任何上限也应该是T(n)的上限。
使用S(n)上的主定理,我们得到a = 2,b = 3/2,并且c = 2.由于log b a = log 3/2 2 = 1.709511291 ... <c,主定理说这将解决O(n 2 )。 由于S(n)= O(n 2 ),我们也知道T(n)= O(n 2 )。
我们已经证明T(n)=Ω(n 2 )并且T(n)= O(n 2 ),因此T(n)=Θ(n 2 ),如所需要的。
希望这可以帮助!
(顺便说一下 - ( 5/9 ) log n =(2 log 5/9 ) log n = 2 log n log 5/9 =(2 log n ) log 5/9 = n log 5/9 。这使它成为现实有点容易推理。)
人们无法从T(n)
或时间复杂度来判断运行时间!它只是根据输入(n)的顺序估计运行时间。
我想补充的一件事是: -
我没有解决你的递归关系,但要记住你的派生关系是正确的,因此进一步把n = 1,在你给定的递归关系中,我们得到
T(1)=T(1/3)+T(2/3)+1
所以,你要么在你的问题中提供T(1/3)
和T(2/3)
的值,要么你必须从给定的问题陈述中理解河内塔的T(1)
应该是什么问题!
对于重复,基本情况是T(1)
,现在根据定义它的值如下:
T(1) = T(1/3) + T(2/3) + 1
既然T(n)表示运行时函数,那么任何不会被处理的输入的运行时总是0
,这包括基本情况下的所有项,所以我们有:
T(X < 1) = 0
T(1/3) = 0
T(2/3) = 0
T(1) = T(1/3) + T(2/3) + 1^2
T(1) = 0 + 0 + 1
T(1) = 1
然后我们可以替换值:
T(n) = n T(1) + [ (9/5)(n^2)( (5/9)^(log n) ) ]
T(n) = n + ( 9/5 n^2 (5/9)^(log n) )
T(n) = n^2 (9/5)^(1-log(n)) + n
对于渐近上界,我们可以近似(9/5)^(1-log(n))
到9/5
,因为(9/5)^(1-log(n)) <= 9/5
:
T(n) ~ 9/5 n^2 + n
O(T(n)) = O(n^2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.