在Prolog w/rbtrees.pl中实现区间树
我正在看interval tree文章中的,以及SWI Prolog标准库中的。文章说, 然后向每个节点添加一个额外的注释,记录从该节点向下的所有间隔中的最大上限值。维护此属性涉及在添加或删除节点时从下到上更新节点的所有祖先 我很容易看到如何添加此注释。假设我要存储间隔在Prolog w/rbtrees.pl中实现区间树,prolog,red-black-tree,interval-tree,Prolog,Red Black Tree,Interval Tree,我正在看interval tree文章中的,以及SWI Prolog标准库中的。文章说, 然后向每个节点添加一个额外的注释,记录从该节点向下的所有间隔中的最大上限值。维护此属性涉及在添加或删除节点时从下到上更新节点的所有祖先 我很容易看到如何添加此注释。假设我要存储间隔7-45。我使用7作为键,对于我的值,我使用一个包含所有信息的结构,因此类似于interval(7-45,MaxBelow)。但我不清楚如何“更新节点的所有祖先”,因为在rb_insert/4之后。我看不到一种方法来获取在前后树之
7-45
。我使用7作为键,对于我的值,我使用一个包含所有信息的结构,因此类似于interval(7-45,MaxBelow)
。但我不清楚如何“更新节点的所有祖先”,因为在rb_insert/4
之后。我看不到一种方法来获取在前后树之间更改的所有节点的列表(生成这样的列表可能会很奇怪,而且效率低下)
使用这种方法是否有一种前进的方法来使用rbtrees.pl
构建这种结构
顺便说一句,我感兴趣的是,rb_empty
使用未实例化的变量作为空节点;这有什么原因吗
编辑:我突然想到,我可以检查前后的树,并尝试统一前后的分支,以找到它发生变化的路径。这会颠覆我追求的性能改进吗?设计一个允许任意比较的对应库怎么样?因此,这样的库也可以是纯粹的——代码支持键值节点;值和键不会改变;在树重新平衡期间,节点的注释可能会因旋转操作而更改;在我看来,您必须实际修改整个库代码。