2016-05-29 12 views
0

私には助けが必要な問題があります。与えられたIm:ツリー内のノード数を計算する方法は?

int sum(int[] array, int first, int last) 
{ 
if (first == last) 
return array[first]; 
int mid = (first + last)/2; 
return sum(array, first, mid) + sum(array, mid + 1, last); 
} 

質問:再帰ツリーのノード数を数える数式を決定します。

だから、私は、再帰方程式得た: T(N)= 2T(N/2)+ DN

を、長さ8の配列については、例えば、再帰ツリー内のノードの数は15であろうこれは、ツリー内のノードの数が2n-1(nは配列のサイズ)となることを示します。

私の考えが正しいかどうか、2n-1の式をどのようなケースにも適用できるのだろうか?また、再帰的なアルゴリズムでは、再帰ツリーのノード数を計算する一般的な方法はありますか?

ありがとうございました!

+1

** dn **とは何ですか?そのコードはどのようなコードを表していますか? – trincot

+0

@trincot ** dn **はおそらく、加算演算のコストと関数内の他の一定の時間演算を表します。というのも、** 2T(n/2)**という用語は再帰呼び出しのためであり、残っている操作(比較、** mid **の計算と加算と復帰)はすべて一定の時間を要するからです。 T(n)= 2T(n/2)+ c – Shubham

+0

** dn **には** n **が表示されていることが疑わしい。ちょうどそれが** n **の値に依存していないことを確認したいと思った。 – trincot

答えて

0
 2 
    /\ 
    1 1 // 2(n) - 1 = 2(2) - 1 = 3 seems to match! 

     3 
    /\ 
    2 1 
/\ 
    1 1  // 2(n) - 1 = 2(3) - 1 = 5 which seems to match 

数式2(n) - 1が正しいと思われます。

関連する問題