2016-12-19 3 views
0

私は、ツリーを複数のスレッドでどれだけ速く変更できるかを確認するテストを設定したいので、キーを使って初期ツリーを設定する必要がありますすべての偶数ノードが挿入されて平衡ツリーを形成すると言う0 - ((2^n)-1)の範囲です。
n = 4であると言う。 この順序で0,2,4,6,8,10,12,14を挿入する必要があります。 [8]、[4,12]、[0,2,6,10,14]。 [6]、[2,10]、[0,4,8,14,12]は均等に均衡のとれたツリーを生成します。現在、2 ^(n-1)すなわち[8]を2 ^(n-2)、すなわち[4,12] 2,6,10,14]というように、最後に0を加えます。
ここはC++のコードですが、アルゴリズムそのものよりも言語の仕様があまりにも心配していません。テスト用バイナリ検索ツリーの半分を埋める最善の方法

 BST tree = BST();   
     INT64 diff = HMK;//HMK = Half Max Key 
     INT64 arrayN[HMK]; 
     INT64 cur = diff; 
     INT64 i = 0; 
     Node aNode[HMK]; 
     while (diff >= 2) { 
      cur = diff; 
      while (cur < MAX_KEY) { 
       aNode[i] = Node(); 
       aNode[i].key=cur; 
       tree.add(&aNode[i]); 
       i++; 
       cur += 2*diff; 
      } 
      diff = diff/2; 
     } 
     aNode[i] = Node(); 
     aNode[i].key = 0; 
     tree.add(&aNode[i]); 

良い方法はありますか?

+0

"複数のスレッドでツリーをどのくらい速く変更できるか" - これは問題ではなく、言語機能に大きく依存しています。 –

+0

私は自分でテストを実装するつもりですが、なぜこの情報を半分のバイナリ検索ツリーが必要なのかというコンテキストとして示しました。どのように言語に依存しているかをよく知っています。 – user3244591

答えて

0

後でツリーを変更する気にしない場合は、最初にスケルトンツリーグラフを作成し、その位置に適した値を入力するのが最も簡単です。

つまり、0からINT_MAXまでの値が必要なので、ルートはINT_MAX/2になります。 に左の子がある場合はINT_MAX/4です。 の場合右の子は3*INT_MAX/4です。ビットパターンは明白でなければなりません:100....010 ... , 110 ... `深さDでは(N-D)番目のビットを設定する必要があるため、これは明らかにNレベルに制限されています。

+0

おかげさまで、それは完璧な意味合いがあり、左右の子供の面でそれを考えなかったのです。このアイデアに基づいて再帰関数を作成するように管理されています。 – user3244591

関連する問題