java最优有序查找——红黑树(RBT)算法

在大量数据中常用的查找数据的做法有四类:顺序查找,二分查找,二叉树查找(BST),红黑树查找(RBT)。
这四类查找方法分别对应着四种基本思想原理:

顺序查找 —— 无序简单查找

二分查找 —— 有序查找,每次折半搜索,插入数据费时

二叉树查找(BST) —— 不平衡二叉树有序查找,插入与搜索综合性能较优

红黑树查找(RBT) —— 平衡二叉树有序查找,插入与搜索综合性能最优

注:从上至下平均性能变优算法难度增大,后三种查找为有序查找。

红黑树(RBT)性能分析

在编写红黑树实现前很有必要对其性能进行分析,通过与前三种算法的比较,分析出现RBT这种数据结构的原因。

算法 最坏查找 最坏插入 平均查找 平均插入 是否有序
顺序查找 N N N/2 N
二分查找 lgN N lgN N/2
二叉树查找(BST) N N 1.39lgN 1.39lgN
红黑树查找(RBT) 2lgN 2lgN 1.001lgN 1.001lgN

顺序查找

顺序查找是指对数据进行无序的从头至尾扫描,这种方法是最原始的最坏情况下查找目标数据需要遍历整个数组,平均查找需要遍历半个数组。而插入则需要完全遍历整个数组。

二分查找

二分查找是查找时间最短的方法,将数组每次以中间值判断,稳定查找lgN(注:lg = log2)时间。但二分查找的插入则需要花费N的复杂度级别的时间来完成。如果我们采用类似二分查找的方式进行插入,即:每次以中值判断最后找出要插入的点,这样看起来时间也是lgN,但对于数组而言插入意味着将之后的数字依次移位,这样更加得不偿失。如果你采用链表结构来实现二分查找,可以满足快速的插入,但是由于没有了索引,仍需遍历数组得到索引,所以二分查找的插入操作复杂度级别为N

二叉树查找(BST)

二叉树查找是在二分基础上提出,为了解决二分查找的插入问题的一种新的查找模式,这种模式通过类似链表的树结构不断地插入数据达到有序,而其查找时间也在lgN复杂度左右,代码实现较为简单。在整个有序树中存在着固定的插入和查找的模式,最后树的形状受到插入数据的先后顺序影响。正因为树的形状受到随机因素影响,在最坏的情况下,这棵树只有左子树没有右子树(或只有右子树没有左子树)导致性能甚至不如二分查找。

红黑树查找(RBT)

红黑树查找是在二叉树查找的基础上,结合了二叉树中简洁高效的查找方法,又同时是一颗保证性能平衡树。在最坏的情况下,红黑树都远好于二叉树。在平均情况下的搜索,红黑树理论上只比二分查找差一点,这是因为红黑树数据结构的特性导致,我们可以认为红黑树的查找和二分查找是相同的。在插入的复杂度比较中比二分查找好太多,红黑树的算法思路是所有有序查找中最优的算法,用便于实现的平衡树高效地完成插入和搜索操作。

红黑树定义

满足下列条件的二叉树是红黑树:

  1. 红链接均为左链接
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值