搜索(查找)树对比

1、AVL(平衡二叉树)与RBT(红黑树)

AVL和RBT都是二叉查找树的优化,其性能要远远好于二叉查找树。

结构对比:AVL的结构高度平衡,RBT的机构基本平衡。平衡度AVL>RBT

查找对比:AVL查找时间复杂度最好,最坏情况下都是O(logN)

                  RBT查找的时间复杂度最好为O(logN),最坏情况下比AVL略差

插入删除对比

                 1、AVL的插入与删除很容易造成树结构的不平衡。而RBT的平衡度要求较低,更容易实现平衡。

                 2、当插入一个结点引起树的不平衡,AVL和RBT都最多需要2次旋转操作,但删除一个结点引起不平衡后,AVL最多需要logN 次旋转操作,而RBT最多只需3次。因此两者插入一个结点的代价差不多,但删除一个结点的代价比RBT要低一些。

                 3、AVL和RBT的插入删除代价最主要还是消耗在查找待操作的结点上。因此时间复杂度基本上都是与O(logN) 成正比的。

总体评价:大量数据实践证明,RBT的总体统计性能要好于平衡二叉树

实际上,插入AVL和RBT的速度取决于你所插入的数据。如果你的数据比较杂乱,红黑树是比较快的,因为红黑树对已经处理好的数据重新平衡减少了不必要的操作。

红黑树是一个更高效的检索二叉树,因此常常用来实现关联数组,JDK的TreeMap本身就是一个红黑树的实现。对于TreeMap而言,由于底层采用“红黑树”来保存集合中的Entry,这就意味着TreeMap添加元素、取出元素的性能都比HashMap低,但TreeMap 中的所有 Entry 总是按 key 根据指定排序规则保持有序状态,TreeSet 中所有元素总是根据指定排序规则保持有序状态。

2、B树与B+树

B+树是B树的一种变体,在磁盘查找结构中,B+树更适合文件系统的磁盘存储结构。

结构对比:B树是多路平衡查找树,所有结点中都包含了待查关键字的有效信息(比如文件磁盘指针)。每个结点存有n个关键字,则有n+1个指针指向其他结点的指针。

                B+树严格意义上说已经不是树了,它的叶子结点之间也有指针链接。B+树的非叶子结点并不包含有关键字信息,需要查找的关键字信息都包含在叶子结点上。非叶子结点只作为叶子结点关键字的索引而存在。

查找对比: 1、在相同数量的待查数据下,B+树的查找过程中需要调用磁盘IO的操作要少于普通的B树,因此B+树的查找性能要好于B树。

               2、B+树的查找效率更加稳定,因为所有的叶子结点都处于同一层中,而且查找所有关键字都必须走完从根结点到叶子结点的全部历程。因此同一棵B+树中,任何关键字的查找比较次数都是一样的。而B树就不一定了。可能查找到某一非叶子结点就结束了。

插入删除对比:B+树于B树在插入删除操作效率是差不多的。

总体评价:在应用背景下,特别是文件结构存储中。B+树的应用要更多,其效率也要比B~树好。

           

发布了28 篇原创文章 · 获赞 9 · 访问量 4659

猜你喜欢

转载自blog.csdn.net/chixi123/article/details/103914670