数据结构(6) -- 查找
查找表:用于查找的数据集合
对查找表的四种操作:
查询某特定元素是否在查找表中
检索满足条件的某个特定的数据元素的各种属性
在查找表中插入一个数据元素
删除一个数据元素
静态查找表:没有插入,删除操作的查找表。查找方法:顺序查找、折半查找、散列查找
动态查找表方法:二叉排序树的查找(二叉平衡树、B树)、散列查找
平均查找长度:,n是查找表的长度。P_{i}是查找第i个元素的概率,C_{i}是找到第i个数据所需进行的比较次数,是查找表的长度。是查找第个元素的概率,是找到第个数据所需进行的比较次数
顺序查找:
一般线性表的顺序查找
缺点:当n较大时,平均查找长度较大,效率低
优点:对数据元素存储没有要求
有序表的顺序查找
折半查找:
折半查找过程可以用判定树表示。圆形结点是一个记录,值为关键字值。叶节点是方形,表示查找不成功的情况。查找成功时查找长度是根节点到目的结点路径上的结点数;不成功是根节点到失败节点父节点的路径上的结点数。
折半查找法查找给定值的比较次数最多不会超过树的高度。
折半查找时间复杂度O(log2n)
折半查找只适合线性表的顺序存储结构,不适合链式存储,且要求元素按关键字有序
分块查找:
查找表分若干子块,块内元素可以无序,但块之间有序。第一个块中关键字小于第二块中所有记录关键字,以此类推。再建立一个索引表,索引表中每个元素含有各块最大关键字和各块第一个元素的地址,索引表按关键字有序排列。
B树
所有结点的孩子结点数的最大值称B树的阶m
若根节点不是终端结点,至少2棵子树,1个关键字
除根节点外的所有非叶节点至少 天花板(m/2)棵子树,天花板(m/2)-1 个关键字
B树是所有结点的平衡因子均等于0的多路查找树
一棵包含n个关键字,高度为h,阶数为m的B树:
B树插入后小于m则直接插入,插入后大于m-1,则需分裂。(最多m-1——
B树删除用到最少天花板(m/2)-1个关键字
B树不支持顺序查找
每个结点关键字个数范围:
B树叶节点个数对应查找失败的情况,n个关键字,失败的可能性n+1种
B+树
每个分支最多m棵子树
非根叶节点至少两棵子树,其他至少天花板(m/2)棵子树。
结点的子树个数与关键字个数相等
B+树支持顺序查找
叶节点包含全部关键字及指向相应记录的指针,叶节点中将关键字按大小顺序排列。分支结点只包含它的各个子节点中关键字的最大值和指针。
每个结点关键字个数范围:
B+树非叶节点不含有关键字对应记录的存储地址
B+树中,无论查找成功与否,每次查找都是一条从根节点到叶节点的路径
散列表
散列函数把查找表中的关键字映射成该关键字对应的地址的函数
冲突:两个或两个以上的不同关键字映射到同一地址
同义词:发生碰撞的关键词
散列表:根据关键字直接进行访问的数据结构,查找时间复杂度O(1),与表中元素个数无关
常用散列函数:
直接定址法
除留余数法
数字分析法
平方取中法
折叠法
处理冲突的方法:
开放定址法
线性探测法
平方探测法
再散列法
伪随机序列法
拉链法
散列表查找效率取决于3个因素:散列函数、处理冲突的方法、装填因子
装填因子:
,表中记录树n、散列表长度m
散列表的平均查找长度依赖于装填因子α,不直接依赖m或n。α越大,表越满
数据结构(6) -- 查找相关推荐
- 【算法与数据结构】查找二叉树的实现
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.题目介绍 二叉树是一种基本的数据结构.查找二叉树是一种方便与查找,删除,插入等功能的二叉树,它要求每 ...
- 数据结构---顺序查找和二分查找
数据结构-顺序查找和二分查找 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> int n;//查找元素数组的长度 vo ...
- 以下哪种数据结构的查找效率最高
网易2017实习生招聘笔试题-Java开发工程师 以下哪种数据结构的查找效率最高 A 二叉树 B 队列 C 栈 D hash 个人参考答案:D 欢迎下方讨论交流
- 数据结构之查找二叉树
前不久去腾讯笔试,居然几道数据结构方面的题目,让我情何以堪啊,都做不动,忘完了,趁着这里想找实习的地方,肯定还要笔试,所以复习一下. 注意:函数指针传递的用法 1.二叉树重要性质: 性质1:在二叉树的 ...
- 数据结构-顺序查找的二分查找法(折半查找)
折半查找要求顺序表中的元素必须是排好序的,即数组中的元素是由小到大排好序的 思想: 1.以数组的边界确定low和high的值,low就是最低的0,high就是最高的n-1(n是元素的个数),这里的lo ...
- 【Java】 大话数据结构(13) 查找算法(4) (散列表(哈希表))
本文根据<大话数据结构>一书,实现了Java版的一个简单的散列表(哈希表). 基本概念 对关键字key,将其值存放在f(key)的存储位置上.由此,在查找时不需比较,只需计算出f(key) ...
- c++创建二叉树_数据结构:查找(4)|| 平衡二叉树
在介绍平衡二叉树之前,应该先了解平衡因子的概念,平衡因子定义为左子树深度减去右子树深度,这个值的绝对值越大,非常容易理解它就对应着越不平衡的情况.一棵平衡的二叉树的平衡因子只能是1,0,-1 如何构建 ...
- 数据结构之查找算法:顺序查找
查找算法:顺序查找 思维导图: 顺序查找的定义: 顺序查找的代码实现: 顺序查找的性能: 思维导图: 顺序查找的定义: 顺序查找的代码实现: typedef struct { //查找表数据结构int ...
- 数据结构-动态查找树表与平衡二叉树 红黑树简单介绍
参考资料 数据结构(严蔚敏) 大话数据结构 百度百科 https://blog.csdn.net/lpp0900320123/article/details/39524947 https://mp.w ...
- 数据结构之查找的概念及简单实现
查找的概念 查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表是由同一类型的数据元素(或记录)构成的集合.由于集合中的数据元素之间存在着完全松散的关系,因此查找表是一种非 ...
最新文章
- NetDevOps — YANG 协议
- python思维导图完整版下载高清_快速学习 Python 的全套 14 张思维导图(附高清版下载)...
- ajax提交后立刻刷新,Ajax提交表单页面刷新很快的解决方法
- iOS13 已越狱 iOS12.4 已越狱
- Linux之ACL权限控制
- BZOJ 2004 公交线路(状压DP+矩阵快速幂)
- java如何把png转换成jpg_Java实现将png格式图片转换成jpg格式图片的方法【测试可用】...
- 【OpenCV 例程200篇】99. 修正阿尔法均值滤波器
- 【leetcode】刷题暂告一个段落
- 一心想斩获算法岗,却碰上最难求职季
- 虚继承中的构造函数的调用
- 转载:PAL/NTSC/BT601/BT656/BT1120基本概念
- macOS系统如何读写NTFS格式的硬盘
- tas5424_TAS5414A,TAS5424A,-电子电路图,电子技术资料网站
- 高德纳(Donald Knuth)语录
- linux分区表导出与恢复,linux下磁盘分区表的备份和恢复
- 欧洲杯:匈牙利vs葡萄牙时间:06-15 23:59 星期二
- Photoshop2022全版本软件安装包(附图文教程、windows\mac系统全版本软件)
- html测试身高体重,【 身高体重测试】_如何测试_注意事项-大众养生网
- 编程疑难杂症の无法剔除的神秘重复记录
热门文章
- 2_6 CompositeMode.cpp 组合模式
- Spring Boot 2.0 迁移指南
- 这里有一份面筋请查收(七)
- 音视频技术开发周刊 90期
- 三年之久的 etcd3 数据不一致 bug 分析
- 从零开始的C++网络编程
- VLDB 2019 | 揭秘腾讯TDSQL全时态数据库系统
- linux下mysql安装
- 解决 Python pip 安装报错:Retrying (Retry(total=4, connect=None, read=None ...)) after connection
- eBay实践Hadoop MapReduce 任务的性能翻倍之路