首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >半填充二进制搜索树进行测试的最佳方法

半填充二进制搜索树进行测试的最佳方法
EN

Stack Overflow用户
提问于 2016-12-19 12:40:23
回答 1查看 244关注 0票数 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^(n-3)的每秒倍数,即2,6,10,14等等,然后在末尾加0。

下面是C++中的代码,但我并不太担心语言细节,更多的是算法本身。

代码语言:javascript
复制
        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]);

有更好的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 15:32:26

如果您不关心稍后更改树,那么首先创建一个骨架树形图,然后放入适合该位置的值,这可能是最简单的。

也就是说,由于您希望0和INT_MAX之间的值,根目录将是INT_MAX/2。如果有一个左子,它就是INT_MAX/4;如果有一个右子,它就是3*INT_MAX/4。比特模式应该是显而易见的:100....010.,110.`。显然,这仅限于N级,因为在深度D处,必须设置(N)第四位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41222818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档