我想设置一个测试,看看多个线程改变树的速度有多快。为了做到这一点,我需要设置一个初始树,其中键在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^(2-3),即[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]);
有更好的方法吗?