数据的存储结构与查找方式

有序数组:

  一组数据按照从小到大的顺序连续存放。

如何查找一个元素?

二分算法:

如果我们要找的值是x,先找数组中间的一个元素,如果比x大就去左边找,比x小就去右边。

时间复杂度log(n)。

如何插入一个元素?

插入n个元素时间复杂度n^2。

搜索树:

有一个父节点,这个节点左边的节点值都比他小,右面的节点值都比他大。

查找效率

根据规则判断是进入左子树还是右子树。

时间复杂度log(n)。

插入效率

根据规则判断是进入左子树还是右子树。

时间复杂度log(n)。

特殊情况

当我们要插入一组有序的数据如:1 2 3 4 5 6 

树的结构变成了:

此时查找的时间复杂度n

AVL树:

AVL 树得名于它的发明者 G. M. Adelson-Velsky 和 Evgenii Landis,他们在1962年的论文《An algorithm for the organization of information》中公开了这一数据结构。

结构和搜索树大致相同,但是加入了约束条件,平衡因子。

平衡因子:左子树的高度与右子树的高度差。

在AVL树中,如果左子树和右子树高度差的绝对值>1需要进行旋转操作调整树的结构。

调整方法

如图是一种左旋方法。通过旋转,让树从不平衡变成平衡的了,同时也降低了树的高度。

查找效率和插入效率都是log(n)。

缺点

平衡条件特别容易打破,插入时需要进行多次旋转。

红黑树:

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或
Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路
径会比其他路径长出俩倍,因而是接近平衡的。

红黑树性质:
1. 每个结点不是红色就是黑色
2. 根节点是黑色的
3. 如果一个节点是红色的,则它的两个孩子结点是黑色的
4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点
5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)

调整方法

情况1:

情况2:

 情况3:

情况4:

虽然调整更复杂,但是红黑树调整次数比AVL树大大减少,效率还是比AVL树优秀。 

这种也是可以存在的,如果是AVL树就还需要多次调整右边的子树。

 

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值