私は、ツリーを複数のスレッドでどれだけ速く変更できるかを確認するテストを設定したいので、キーを使って初期ツリーを設定する必要がありますすべての偶数ノードが挿入されて平衡ツリーを形成すると言う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]);
良い方法はありますか?
"複数のスレッドでツリーをどのくらい速く変更できるか" - これは問題ではなく、言語機能に大きく依存しています。 –
私は自分でテストを実装するつもりですが、なぜこの情報を半分のバイナリ検索ツリーが必要なのかというコンテキストとして示しました。どのように言語に依存しているかをよく知っています。 – user3244591