繁体   English   中英

特殊增强红黑树

Special Augmented Red-Black Tree

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在寻找有关特定增强型红黑二叉树的帮助。 我的目标是让每一个操作运行O(log(n))在最坏的情况下。 树的节点将有一个整数作为键。 这个整数不能为负,和树应通过简单的比较功能关闭此整数进行排序。 此外,每个节点还将存储另一个值:其功率。 (请注意,这有没有关系的数学指数)。 电源是一个浮点值。 电源和密钥总是非负的。 该树必须能够在O(log(n))运行时中提供以下操作:

  1. 插入(键,电源开):插入到树。 在树的节点也应存储能力,以及所需的任何其他变量,以增加树以这样的方式,所有的其他操作也O(log(n)) 你可以假设存在已经有相同的密钥树没有节点。

  2. get(key):返回该键标识的节点的电源。

  3. 删除(键):删除与关键节点(假设键时在删除前的树存在。

  4. update(key,power):更新key给定节点上的功率。

这里是它变得有趣:

  1. highestPower(KEY1,KEY2):返回所有节点的最大功率与关键k范围KEY1 <= k <= KEY2。 也就是说,两端都包含从key1到key2的所有键。

  2. powerSum(KEY1,KEY2):与主要返回所有节点的功率的总和k在ragne KEY1 <= k <= KEY2。 也就是说,两端都包含从key1到key2的所有键。

我想知道的主要事情是我应该在每个节点上存储哪些额外的变量。 然后,我需要弄清楚如何在上述每个函数中使用这些函数中的每一个,以使树保持平衡,并且所有操作都可以在O(log(n))运行。我的最初想法是存储以下内容:

  1. highestPowerLeft:所有子节点到该节点的右侧的最​​高功率。
  2. mostPowerRight:此节点右边所有子节点的最高功率。
  3. powerSumLeft:所有子节点的这个节点左侧的功率之和。
  4. powerSumRight:所有子节点到该节点的权权力的总和。

也只是这个额外的信息工作? 如果是这样,我不确定如何在所需的函数中处理它。 坦白说,我对Red Black Tree的了解不是很好,因为我觉得对它们的所有解释都很快被弄乱了,所有的旋转和事物都使我感到困惑。 感谢愿意在这里提供帮助的任何人,我知道我要问的远非简单。

1 个回复

一个非常有趣的问题! 对于总和,您提出的方法应该可以工作(尽管只存储当前节点左侧的幂之和就足够了;这种技术称为prefix sum )。 对于最大值,这是行不通的,因为如果两个最大值相等,则该值超出了间隔,因此您不知道间隔中的最大值是多少。 我唯一的想法是使用分段树 (其中的叶子是红黑树的节点),它可以让您回答以下问题:“给定范围内的最大值是多少?” 以对数时间显示,还可以使您以对数时间更新单个值。 但是,由于需要在其中插入新值,因此也需要保持平衡。

1 为minDiff增强红黑树

所以我有以下问题: 您拥有一组存储在红黑树中的数字S。 您正在尝试将minDiff添加到红黑树,这将为您提供S中两个最接近的数字之间的绝对差。例如,如果S = {1,18,23,62,79,100} minDiff将返回5(| 23-18 |) A)展示如何增加一棵红黑树以有效地支持此操作,同 ...

2 插入增强红黑树

我正在查看插入增强红黑树的代码。 该树还有一个称为“大小”的附加字段,它保留了以节点x为根的子树的大小。 这是用于插入新节点的伪代码: 忘记固定颜色和旋转,它们将在另一个功能中完成。 我的问题是,为什么我们将新添加的节点“ x”的大小设置为1? 我知道它不会有任何子树,所以它的大 ...

3 串红黑树

我应该对我正在阅读的有关红黑树的论文做出回应,并使用相对键而不是绝对键。 讨论的重点应该是将此与字符串相关联。 当键应该是数字值时,我不完全知道如何使用一棵红黑树来处理字符串。 我能弄清楚的是,可以按某些条件对字符串进行排序,然后该有序列表中每个字符串的索引就是它的键。 之后,对 ...

4 红黑树的直觉

我想了解红黑树是如何工作的。 我理解算法,如何在插入和删除操作后修复属性,但我不清楚。 为什么红黑树比二叉树更平衡? 我想了解直觉,为什么旋转和固定树属性会使红黑树更加平衡。 谢谢。 ...

6 红黑树重组

我真的很奇怪,发生重组处理器时,Black节点号从外部节点到根节点是否有任何变化。 请回答我。 (我真的很抱歉我的英语不好。) ...

8 红黑树和Multimap

在许多编译器中,标准数据结构(如Set , Map和Multimap在后面使用Red-Black-Trees,而multimap存储多个和重复的键。 我有一个关于以下引用的问题: “红黑树唯一地存储密钥,并且只为每个密钥绑定一个DataValue” 以上陈述是真的吗? ...

10 C红黑树

我正在尝试在C中实现红黑树。作为参考,我正在使用CLRS 。 但是,当我运行代码时,我收到“分段错误(核心已转储)”错误消息。 我无法弄清楚代码中有什么问题,有人可以告诉我代码中有什么问题吗? 问题似乎出在函数rb_insert_fixup() ,但我不知道其中有什么问题。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM