数据结构-高效实现增删改查

散列表(hash表)

有两种办法:
(1)开放地址法
(2)chaining法

注:java底层实现chaining法

讲解:
0、key-value中的value可以是null
1、确定数组的下标
2、hash冲突问题
3、capacity的默认值,capacity扩增时,需要确定扩增多大,扩增之后原本存储的数据下标是否需要改变

#总结
1、散列表能很好地解决精确查询(O(1) 复杂度),但无法解决范围查询(必须 O(n) 复杂度);

2、基于有序数组的二分搜索能很好地解决精确查询和范围查询(O() 复杂度),但无法解决插入和删除(必须 O(n) 复杂度);

3、基于二分搜索思想改进的链表(二叉搜索树)能很好地解决查询(包括范围查询)、插入和删除,所有的操作都是 O() 的时间复杂度;

4、二叉搜索树中以任意节点作为根的子树仍然是一棵二叉搜索树,这个特点很重要,它是递归操作的关键;

5、二叉搜索树存在节点倾斜问题,会降低操作性能,极端情况下会退化成普通链表,所有的操作都退化到 O(n) 复杂度;

6、为解决二叉搜索树的倾斜问题,实际应用中需引入相关平衡方案,本系列的后序文章将介绍三种常见的方案:红黑树、跳表和 B 树;

7、红黑树

至此,我们在两位教授的帮助下,大体厘清了红黑树的演化过程:

(1)找到二叉树倾斜的原因:向下生长;

(2)阻止倾斜的策略:改变生长方向——采用裂变式向上生长策略;

(3)基于 2,演化出 2-3 树;

(4)由于 2-3 树实现上的复杂性,引出用二叉树表示 2-3 树的想法——红黑树;

(5)基于 2-3 树的相关特性,总结出左倾红黑树的 4 条特性,其中特性 1 和特性 2 是核心特性;

(6)基于二叉搜索树的特性,发现三个核心操作:左旋、右旋和颜色翻转——有了这三板斧,便可以完全脱离 2-3 树来处理红黑树的平衡性,至此红黑树有了实现上的可能;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值