数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树
七大查找算法:https://www.cnblogs.com/zhang-qc/p/8745153.html
学习的地址 https://www.bilibili.com/video/av27831455?p=20
关于查找表:
上面,静态查找表,找的过程中不改变表。动态查找表,过程中表会变。
静态查找表,对确定的数据元素关系的表查找,不一定是线性表。
关于查找:
上面,概率相同。 我们可以改变元素的排列顺序,可能比较次数会少一点。
平均查找长度,表征效率的问题。
下面为顺序查找:顺序查找适合于存储结构为顺序存储或链接存储的线性表,时间复杂度为O(n)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
折半查找(二分查找):(数据要先有序才行,如果是无序的则要先进行排序操作。)
最大比较次数就是 log2n
下面2种查找方法(斐波那契查找和插值查找),思想和上面类似,都是按照某个函数给元素分段。
斐波那契查找:二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,要求开始表中记录的个数为某个斐波那契数小1,及n=F(k)-1;开始将k值与第F(k-1)位置的记录进行比较(及mid=low+F(k-1)-1)。如果>,low=mid+1,k-=2;如果<,high=mid-1,k-=1。
差值查找:基于二分查找算法,将查找点的选择改进为自适应选择,mid=low+(key-a[low])/(a[high]-a[low])*(high-low),适合表长较大,而关键字分布又比较均匀的查找表
分块查找:又称索引顺序查找,它是顺序查找的一种改进方法。
下图,三个子表,第三个子表的数都大于第二个子表的数都大于第一个子表的数。
中间表,第一行是这段子表中最大的数。第二行是子表第一个元素的位置。
二叉查找(排序)树:先看根节点,再往左右的一边,再看子树的根节点,再左右,再根......
类似于折半查找。
下图,先构造二叉排序树,再查找。
第一个数就是树的根节点,
平衡二叉树
平衡因子:左子树的深度减去右子树的深度
平衡二叉树:平衡因子为-1, 0, 1
平衡二叉树上所有结点的平衡因子只可能是 -1,0 或 1。
下图关于平衡因子,指的是平衡二叉树的平衡因子。
动态平衡要求的是要在插入是,时刻保持树的平衡性。
如果在AVL树中进行插入或删除节点,可能导致AVL树失去平衡,这种失去平衡的二叉树可以概括为四种姿态:LL(左左)、RR(右右)、LR(左右)、RL(右左)。AVL树失去平衡之后,可以通过旋转使其恢复平衡。
平衡二叉树的构造:左旋、右旋、左右旋、右左旋
- 平衡查找树之2-3查找树(2-3 Tree)
2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgn,从而保证了最坏情况下的时间复杂度。
https://www.cnblogs.com/yangecnu/p/Introduce-2-3-Search-Tree.html
上面链接,其中,根节点分裂 的小节 的图是错误的,关于根节点分裂参看
https://blog.csdn.net/u011337574/article/details/80710824
- 平衡查找树之红黑树(Red-Black Tree)
在2-3查找树基础上改进的红黑树
https://zhuanlan.zhihu.com/p/55255223?edition=yidianzixun&utm_source=yidianzixun&yidian_docid=0L8RqVEX
- B树和B+树(B Tree/B+ Tree)
介绍:https://www.e-learn.cn/content/qita/809639
树表查找总结:
二叉查找树平均查找性能不错,为O(logn),但是最坏情况会退化为O(n)。在二叉查找树的基础上进行优化,我们可以使用平衡查找树。平衡查找树中的2-3查找树,这种数据结构在插入之后能够进行自平衡操作,从而保证了树的高度在一定的范围内进而能够保证最坏情况下的时间复杂度。但是2-3查找树实现起来比较困难,红黑树是2-3树的一种简单高效的实现,他巧妙地使用颜色标记来替代2-3树中比较难处理的3-node节点问题。红黑树是一种比较高效的平衡查找树,应用非常广泛,很多编程语言的内部实现都或多或少的采用了红黑树。
除此之外,2-3查找树的另一个扩展——B/B+平衡树,在文件系统和数据库系统中有着广泛的应用。
哈希查找:空间换时间,map的本质就是Hash表
例题
数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树相关推荐
- 数据结构---二叉平衡排序树的删除
数据结构-二叉平衡排序树的删除 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> typedef struct avlT ...
- C++ 第八节数据结构 第七节 ——二叉搜索树 AVL树 红黑树(底层原理图+模拟实现)
第一次,C++和数据结构联合推出,倾情献上呦~~ 给个关注吧 23333~~~~~~(现在每天系统就给我一个机器人的粉丝量了55555~~~~~) 本节内容,我们将着重来探讨 二叉树 中特殊的两种树- ...
- 二叉查找(排序)树/二叉树----建树,遍历
二叉查找(排序)树/二叉树----建树,遍历 import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...
- 【数据结构笔记11】二叉搜索树,动态查找,删除操作
本次笔记内容: 4.1.1 二叉搜索树及查找 4.1.2 二叉搜索树的插入 4.1.3 二叉搜索树的删除 文章目录 动态查找 什么是二叉搜索树(BST) 二叉树的操作 二叉搜索树的查找操作 二叉搜索树 ...
- 《数据结构与算法之二叉平衡树(AVL)》
说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正.若在阅 ...
- 42. 盘点那些必问的数据结构算法题之二叉堆
盘点那些必问的数据结构算法题之二叉堆 0 概述 1 二叉堆定义 2 保持堆的性质 3 建立最大堆 4 堆排序 5 优先级队列 参考资料 0 概述 本文要描述的堆是二叉堆.二叉堆是一种数组对象,可以被视 ...
- 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
原文:http://blog.csdn.net/sup_heaven/article/details/39313731 数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B ...
- 14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)
♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥ ...
- 二叉平衡树(AVL树)详细理解
二叉平衡树(AVL树) AVL树插入元素结论 单旋转: 双旋转: 如果看到后面会发现,我下面举得列子,类型一和类型三和我结论里面的有点不一样,那是因为类型一的节点4和类型三的节点14无论以何种方式都能 ...
最新文章
- 关于WPF中TextBox使用SelectAll无效的问题的解决办法
- android shape画边框,安卓用shape画圆角矩形边框
- 微信小程序_简单组件使用与数据绑定
- Android MediaCodec实现多段音视频的截取与拼接
- PSCAD X4.6.2 免费下载
- 什么职业的人适合考PMP?(含PMP资料)
- 修复 Mac 上“未找到 AirPrint 打印机”的错误
- 数学建模计算机模拟实验答案,数学建模与数学实验课后习题答案.doc
- 巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)
- 理解Spring 容器设计理念
- Pubwin服务端重装(安装)教程
- v-bind绑定无效 - Vue
- 马哥linux培训python
- ubuntu中对于大小写锁定键的控制
- 【光线追踪】光线追踪重投影方法(Ray Tracing Reprojection)
- 如何远程家里的linux服务器,如何远程控制家里的电脑或服务器?
- 预约类微信小程序了解一下
- pandas 数据筛选与索取
- 《Energy Procedia》期刊介绍(会议论文)
- 解决Office 2007和Visual Studio 2008冲突不兼容的问题