4

我正在查看区间树文章中的增强树,并查看 SWI-Prolog 标准库中的rbtrees.pl。文章说:

然后将一个额外的注释添加到每个节点,记录从该节点向下的所有间隔中的最大上限值。维护此属性涉及在添加或删除节点时从下到上更新节点的所有祖先。

我很容易看到如何添加此注释。假设我想存储区间7-45。我使用 7 作为键,为了我的价值,我使用了一个包含我所有信息的结构,所以类似于interval(7-45, MaxBelow). 但我不清楚我将如何“更新节点的所有祖先”,因为在rb_insert/4. 我没有看到一种方法来获取在前后树之间发生变化的所有节点的列表(无论如何生成这样的列表可能会很奇怪且效率低下)。

有没有办法用这种方法来构建这个结构rbtrees.pl

顺便说一句,rb_empty使用未实例化的变量作为空节点对我来说很有趣。是否有一个原因?

编辑:在我看来,我可以检查前后树并尝试统一之前和之后的分支以找到它改变的路径。这会颠覆我追求的性能提升吗?

4

0 回答 0