5.树表查找
5.1 最简单的树表查找算法——二叉树查找算法
基本思想:
这个算法的查找效率很高,但是如果使用这种查找方法要首先创建树 。
二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:
1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2)若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3)任意节点的左、右子树也分别为二叉查找树 。
二叉查找树性质:
对二叉查找树进行中序遍历,即可得到有序的数列 。
有关二叉查找树的查找、插入、删除等操作的详细讲解,请移步浅谈算法和数据结构: 七 二叉查找树
复杂度分析:
它和二分查找一样,插入和查找的时间复杂度均为O(logn),但是在最坏的情况下仍然会有O(n)的时间复杂度 。原因在于插入和删除元素的时候,树没有保持平衡(比如,我们查找上图(b)中的“93”,我们需要进行n次查找操作) 。我们追求的是在最坏的情况下仍然有较好的时间复杂度,这就是平衡查找树设计的初衷 。
基于二叉查找树进行优化,进而可以得到其他的树表查找算法,如平衡树、红黑树等高效算法 。
5.2 平衡查找树之2-3查找树(2-3 Tree)
https://riteme.github.io/blog/2016-3-12/2-3-tree-and-red-black-tree.html
2-3查找树定义:和二叉树不一样,2-3树运行每个节点保存1个或者两个的值 。对于普通的2节点(2-node),他保存1个key和左右两个自己点 。对应3节点(3-node),保存两个Key,2-3查找树的定义如下:
1)要么为空,要么:
2)对于2节点,该节点保存一个key及对应value,以及两个指向左右节点的节点,左节点也是一个2-3节点,所有的值都比key要小,右节点也是一个2-3节点,所有的值比key要大 。
3)对于3节点,该节点保存两个key及对应value,以及三个指向左中右的节点 。左节点也是一个2-3节点,所有的值均比两个key中的最小的key还要小;中间节点也是一个2-3节点,中间节点的key值在两个跟节点key值之间;右节点也是一个2-3节点,节点的所有key值比两个key中的最大的key还要大 。
2-3查找树的性质:
1)如果中序遍历2-3查找树,就可以得到排好序的序列;
2)在一个完全平衡的2-3查找树中,根节点到每一个为空节点的距离都相同 。(这也是平衡树中“平衡”一词的概念,根节点到叶节点的最长距离对应于查找算法的最坏情况,而平衡树中根节点到叶节点的距离都一样,最坏情况也具有对数复杂度 。)
复杂度分析:
2-3树的查找效率与树的高度是息息相关的 。
距离来说,对于1百万个节点的2-3树,树的高度为12-20之间,对于10亿个节点的2-3树,树的高度为18-30之间 。
对于插入来说,只需要常数次操作即可完成,因为他只需要修改与该节点关联的节点即可,不需要检查其他节点,所以效率和查找类似 。
![查找算法最强总结及其算法实现](http://img.jiangsulong.com/220408/0H4126245-1.jpg)
文章插图
这里写图片描述
5.3 平衡查找树之红黑树(Red-Black Tree)
但是2-3树实现起来比较复杂,于是就有了一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree) 。
红黑树的定义:
红黑树是一种具有红色和黑色链接的平衡查找树,同时满足:
- 红色节点向左倾斜
- 一个节点不可能有两个红色链接
- 整个树完全黑色平衡,即从根节点到所以叶子结点的路径上,黑色链接的个数都相同 。
![查找算法最强总结及其算法实现](http://img.jiangsulong.com/220408/0H412E64-2.jpg)
文章插图
这里写图片描述
复杂度分析:
【查找算法最强总结及其算法实现】最坏的情况就是,红黑树中除了最左侧路径全部是由3-node节点组成,即红黑相间的路径长度是全黑路径长度的2倍 。
下图是一个典型的红黑树,从中可以看到最长的路径(红黑相间的路径)是最短路径的2倍:
![查找算法最强总结及其算法实现](http://img.jiangsulong.com/220408/0H4124b0-3.jpg)
文章插图
这里写图片描述
红黑树这种数据结构应用十分广泛,在多种编程语言中被用作符号表的实现,如:
推荐阅读
- 对称密码——DES加密算法
- 用讲故事的办法帮你理解 SMO 算法
- Sql Server中孤立的SQL用户查找和删除
- 阿里“推荐系统”背后的算法介绍
- 算法入门篇:简单的排序算法
- 区块链核心技术之哈希算法
- 《山海经》最强异兽排名 山海经异兽排行榜第一是什么
- 世界上有毒的章鱼是什么 毒性最强的章鱼是什么章鱼
- 图解 轻松学习冒泡、选择、插入排序算法
- 算法思路 过程动图 Java排序算法实现方式