【发布时间】:2019-03-12 00:13:35
【问题描述】:
我有一个自平衡键值二叉树(类似于 Tarjan 的 Zip Tree),其中会有重复的键。为了确保 O(log N) 性能,我唯一能想到的就是为每个节点维护三个指针;小于、大于和“等于”。 equals 指针是指向具有相同键的成员的链表的指针。
这对我来说似乎内存效率低下,因为我将在整个树中的每个节点有额外的 8 个字节来处理不常见的重复事件。有没有更好的方法不涉及“作弊”,例如位敲击左指针或右指针以用作标志?
【问题讨论】:
-
我们在谈论多少个节点?
-
当然你可以说 if(data == node->value) return;
-
@jwdonahue 。我用 50,000,000 进行测试。
-
节点的值数据局部性是否满足要求?
-
使用指向重复列表的指针的一字节或二字节哈希。没有欺骗时将其设置为零。