二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)

来源:互联网 发布:如何设置网络共享权限 编辑:程序博客网 时间:2024/05/21 21:39

二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)

动态查找树: 二叉查找树(BST)、平衡二叉查找树(AVL)、红黑树(RBT)、B~/B+树(B-tree)
1、都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作来有限的改变树的形态。而这些操作所付出的代价都远远小于重建一棵树。
2、查找的时间复杂度大体维持在O(log(N))数量级。可能有些结构在最差的情况下效率将会下降很快,比如BST。

  1. 二叉查找树(Binary Search Tree)
    BST效率:
    查找最好时间复杂度O(logN),最坏时间复杂度O(N)。
    插入删除操作算法简单,时间复杂度与查找差不多

  2. 平衡二叉查找树(Balanced Binary Search Tree):将不平衡树改变成平衡树
    AVL效率:
    查找的时间复杂度维持在O(logN),不会出现最差情况
    AVL树在执行每个插入操作时最多需要1次旋转,其时间复杂度在O(logN)左右。
    AVL树在执行删除时代价稍大,执行每个删除操作的时间复杂度需要O(2logN)。

  3. 红黑树(Red-Black Tree)
    不牺牲太大的建立查找结构的代价,保证稳定高效的查找效率
    RBT效率总结:
    查找 效率最好情况下时间复杂度为O(logN),但在最坏情况下比AVL要差一些,但也远远好于BST。
    插入和删除操作改变树的平衡性的概率要远远小于AVL(RBT不是高度平衡的)。
    因此需要的旋转操作的可能性要小,而且一旦需要旋转,插入一个结点最多只需要旋转2次,删除最多只需要旋转3次(小于AVL的删除操作所需要的旋转次数)。
    虽然变色操作的时间复杂度在O(logN),但是实际上,这种操作由于简单所需要的代价很小。

  4. B~树/B+树(B-Tree)
    B-Tree效率:由于考虑磁盘储存结构,B树的查找、删除、插入的代价都远远要小于任何二叉结构树(读写磁盘次数的降低)。

动态查找树结构的对比:
1)、平衡二叉树和红黑树[AVL & RBT]
AVL 和RBT 都是二叉查找树的优化。其性能要远远好于二叉查找树。
结构对比: AVL的结构高度平衡,RBT的结构基本平衡。平衡度AVL > RBT.
查找对比: AVL查找时间复杂度最好,最坏情况都是O(logN)。RBT查找时间复杂度最好为O(logN),最坏情况下比AVL略差。
插入删除对比:
1、AVL的插入和删除结点很容易造成树结构的不平衡,而RBT的平衡度要求较低。因此在大量数据插入的情况下,RBT需要通过旋转变色操作来重新达到平衡的频度要小于AVL。
2、如果需要平衡处理时,RBT比AVL多一种变色操作,而且变色的时间复杂度在O(logN)数量级上。但是由于操作简单,所以在实践中这种变色仍然是非常快速的。
3、当插入一个结点都引起了树的不平衡,AVL和RBT都最多需要2次旋转操作。但删除一个结点引起不平衡后,AVL最多需要logN 次旋转操作,而RBT最多只需要3次。因此两者插入一个结点的代价差不多,但删除一个结点的代价RBT要低一些。
4、AVL和RBT的插入删除代价主要还是消耗在查找待操作的结点上。因此时间复杂度基本上都是与O(logN) 成正比的。

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

2)、B~树和B+树[B~Tree & B+Tree]
B+树是B~树的一种变体,在磁盘查找结构中,B+树更适合文件系统的磁盘存储结构。
结构对比:
B~树是平衡多路查找树,所有结点中都包含了待查关键字的有效信息(比如文件磁盘指针)。每个结点若有n个关键字,则有n+1个指向其他结点的指针。
B+树严格意义上说已经不是树,它的叶子结点之间也有指针链接。B+树的非终结点中并不含有关键字的信息,需要查找的关键字的全部信息都包含在叶子结点上。非终结点中只作为叶子结点关键字的索引而存在。
查找对比:
1、在相同数量的待查数据下,B+树查找过程中需要调用的磁盘IO操作要少于普通B~树。由于B树所在的磁盘存储背景下,因此B+树的查找性能要好于B~树。
2、B+树的查找效率更加稳定,因为所有叶子结点都处于同一层中,而且查找所有关键字都必须走完从根结点到叶子结点的全部历程。因此同一颗B+树中,任何关键字的查找比较次数都是一样的。而B树就不一定了,可能查找到某一个非终结点就结束了。
插入删除对比:
B+树与B~树在插入删除操作中的效率是差不多的。

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

阅读全文
0 0
原创粉丝点击