繁体   English   中英

求出递归T(n)= T(n / 3)+ T(2n / 3)+ n ^ 2?

[英]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/9log n =(2 log 5/9log n = 2 log n log 5/9 =(2 log nlog 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM