【发布时间】:2012-12-10 00:54:48
【问题描述】:
Relaxed Radix Balanced Trees(RRB-trees)是不可变向量(用于 Clojure 和 Scala)的泛化,具有“有效恒定”的索引和更新时间。 RRB 树保持高效的索引和更新,但也允许高效的连接 (log n)。
作者以我难以理解的方式呈现数据结构。我不太确定每个节点维护的不变量是什么。
在第 2.5 节中,他们描述了他们的算法。我认为他们确保索引到节点只需要在基数搜索之后进行额外的线性搜索步骤。我不明白他们是如何得出额外步骤的公式的,我想也许我不确定每个变量的含义(特别是“总共 p 个子树分支”)。
RRB-tree 连接算法是如何工作的?
【问题讨论】:
-
我对它们的表示感到困惑的一点是,对于所有向量大小,every 节点不可能是度数-m 或度数-(m-1)。考虑例如 m=8 和长度为 80 的向量。我假设右脊椎允许具有任意度数,但如果他们在论文中说我错过了它。
-
@BenYlvisaker 询问是否允许 RRB 向量的右脊柱具有任意度数。两年后:-),这是一个答案。是:RRB 树的所有节点都应包含在 (m - e) 和 m 子节点之间,其中 e 是允许的弹性因子 - except 用于树的最右边的脊椎,其可以安全地包含少于 m - e 子节点。 (对于 32 路向量,e = 2 是一个不错的选择)。 Bagwell 和 Rompf 在他们的论文中没有提到这一点,但 Jean Niklas L'orange 在他的master's thesis about RRB trees 中确实提到了这一点。
标签: algorithm scala data-structures clojure tree