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

时间:2014-09-08 04:34:31

标签: algorithm runtime recurrence

我一直试图解决复发关系。

重复是T(n) = T(n/3)+T(2n/3)+n^2

我解决了重复n我得到了T(n)=nT(1)+ [ (9/5)(n^2)( (5/9)^(log n) ) ]

有人能告诉我这个表达式的运行时间吗?

2 个答案:

答案 0 :(得分:3)

我认为这种复发可以达到Θ(n 2 )。为了看到这一点,我们将证明T(n)=Ω(n 2 )和T(n)= O(n 2 )。

显示T(n)=Ω(n 2 )非常简单 - 因为T(n)中有一个n 2 项,它肯定是Ω( ñ 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,Master Theorem说这将解决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 。让它更容易推理。)

答案 1 :(得分:1)

人们无法从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)