Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Prolog w/rbtrees.pl中实现区间树_Prolog_Red Black Tree_Interval Tree - Fatal编程技术网

在Prolog w/rbtrees.pl中实现区间树

在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之后。我看不到一种方法来获取在前后树之

我正在看interval tree文章中的,以及SWI Prolog标准库中的。文章说,

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

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

使用这种方法是否有一种前进的方法来使用
rbtrees.pl
构建这种结构

顺便说一句,我感兴趣的是,
rb_empty
使用未实例化的变量作为空节点;这有什么原因吗


编辑:我突然想到,我可以检查前后的树,并尝试统一前后的分支,以找到它发生变化的路径。这会颠覆我追求的性能改进吗?

设计一个允许任意比较的对应库怎么样?因此,这样的库也可以是纯粹的——代码支持键值节点;值和键不会改变;在树重新平衡期间,节点的注释可能会因旋转操作而更改;在我看来,您必须实际修改整个库代码。