Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Algorithm 红黑树的应用_Algorithm_Data Structures_Tree_Red Black Tree - Fatal编程技术网

Algorithm 红黑树的应用

Algorithm 红黑树的应用,algorithm,data-structures,tree,red-black-tree,Algorithm,Data Structures,Tree,Red Black Tree,红黑(RB)树的应用是什么?是否存在只使用RB树而不使用其他数据结构的应用程序 除非您有非常具体的性能要求,否则R-B树可以被其他自平衡二叉树(例如AVL树)所取代。在两者之间进行选择基本上是一种性能优化——它们提供相同的基本操作 并不是说它们中的任何一个肯定比另一个“快”,只是它们的不同程度足以使它们的特定用途往往会有稍微不同的性能,其他所有方面都是相同的。因此,如果您足够仔细地绘制需求,或者只是碰巧,您可能最终会发现其中一个“足够快”以供您使用,而另一个则不然。R-B的插入速度比AVL稍快,

红黑(RB)树的应用是什么?是否存在只使用RB树而不使用其他数据结构的应用程序

除非您有非常具体的性能要求,否则R-B树可以被其他自平衡二叉树(例如AVL树)所取代。在两者之间进行选择基本上是一种性能优化——它们提供相同的基本操作

并不是说它们中的任何一个肯定比另一个“快”,只是它们的不同程度足以使它们的特定用途往往会有稍微不同的性能,其他所有方面都是相同的。因此,如果您足够仔细地绘制需求,或者只是碰巧,您可能最终会发现其中一个“足够快”以供您使用,而另一个则不然。R-B的插入速度比AVL稍快,但查找速度稍慢。

A是A的一种特殊实现,今天它似乎是最流行的实现选择

用于实现有限映射,其中存储一组具有关联值的键。也可以通过仅使用键而不存储任何值来实现集合

需要平衡树以保证良好的性能,否则树可能退化为列表,例如,如果插入已排序的键

与哈希表相比,搜索树的优势在于,您可以按排序顺序高效地遍历树

是平衡二进制搜索树的另一个变体。它们在红黑树出现之前就很流行了。它们更加小心地平衡,左子树和右子树的高度之间的最大差异为1(RB树最多保证两个因子)。他们的主要缺点是重新平衡需要更多的努力


所以红黑树当然是一个不错的选择,但不是这个应用程序的唯一选择。

没有像红黑这样的规则只能在特定情况下使用 这取决于应用程序的情况,例如,当您只需构建一次树,并且需要多次查询它时,您可以选择AVL树,因为在AVL树中搜索速度非常快。。但它是严格平衡的,因此插入和删除可能需要一些时间 AVl树可用于只需构建一次数据结构的语言词典 红黑树用于当前Linux内核中使用的完全公平的调度程序,现在每天使用一次

应用于红黑树的约束还强制要求从根到最远叶的路径长度不超过从根到最近叶的路径长度的两倍

顺便说一句,你可以在这里找到红黑树所需的各种搜索和插入等时间

        Average     Worst case

Space   O(n)        O(n) 

Search  O(log n)    O(log n)

Insert  O(log n)    O(log n)

Delete  O(log n)    O(log n)

红黑树来自一类自平衡BST,正如其他人所回答的,任何这样的自平衡树都可以使用。我想补充一点,红黑树被广泛用作系统符号表。例如,它们用于实现以下功能:

  • Java:Java.util.TreeMap,Java.util.TreeSet
  • C++STL:map,multimap,multiset
  • Linux内核:完全公平调度程序,Linux/rbtree.h

对于任何数据结构,您都可以完成一些工作,但在某些情况下,它会变得
O(可怕)
。问题应该是:哪些算法最适合RB树?(我相信维基百科有一些答案)。真的,有人能回答为什么在第一种情况下节点是红色和黑色的吗?我的意思是,为什么我们首先要制作两种不同类型的节点?我认为AVL树更好,因为它们是可以理解的。我还没有遇到一位了解RB树工作原理的开发人员——我的意思是,理解RB树比背诵平衡规则列表要多。基本不变量并没有那么复杂:在红黑树中,到叶子的每条路径都有相同数量的黑色节点,并且路径上没有相邻的红色节点。这意味着路径的长度最多相差两倍。至于所需的旋转,这是两种树的个案分析。