数据结构--查找
数据结构--查找
7.1 查找的概念
在哪里找?
---查找表
查找表是由同一类型的数据元素(或记录)构成的集合.由于"集合"中的数据元素之间存在着松散的关系,因此查找表是一种灵便的结构
什么是查找?
-----根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素或(记录).
查找是否成功?
若查找表中存在这样一个记录,则称为查找成功
否则查找不成功
查找的目的是什么?
-
查询某个特定的数据元素是否在查找表中:
-
检索某个特定的数据元素的各种属性;
-
在查找表中插入一个数据元素;
-
删除查找表中的某个数据元素
查找表的分类
- 静态查找表
- 动态查找表
如何评价查找算法?
关键字的平均比较次数,也称平均查找长度
研究什么?
研究查找表的各种组织方法及其查找过程的实施过程
顺序表的查找
1. 顺序查找(线性查找)
应用范围:
- 顺序表或线性链表表示的静态查找表
- 表内元素之间无序
可以从前向后找或从后向前找
找到返回下标
算法实现
算法的其他形式
不需要进行两次查找的改进.
将待查关键字key存入表头(哨兵,监视哨);
监视哨放在查找表的0号元素
设置监视哨的顺序查找
当ST.length较大时,这个改进可以使进行一次查找所需的平均时间几乎减少一半
带哨兵的顺序查找的时间效率分析
比较次数与key位置有关:
-
查找第i个元素,需要比较n-i+1次
-
查找失败,需要比较n+1次
顺序查找的性能分析
记录的查找概率不相等时如何提高查找效率.?
查找表储存记录原则---按查找概率从高到低存储;
记录的查找概率无法测定时如何提高查找效率?
方法--按查找概率动态调整记录顺序
顺序查找的特点
折半查找(二分或对分查找)
顺序查找的特点
折半查找:每次将待查找记录区间缩小一半
折半查找算法(非递归)
算法7.3(非递归)
算法7.3递归
折半查找的性能分析
可以找到折半查找的判定树
圆形---内节点代表查找成功.
矩形--外节点代表查找不成功的情况
查找成功:
比较次数=路径上的节点树
比较次数=节点的层数
树的深度>=比较次数
查找不超过
比较次数=路径上的内部节点数
假设每个元素的查找概率相等,求查找成功的平均长度
平均查找长度ASL(成功时)
折半查找优点:效率比顺序表高.
折半查找缺点:只适用于有序表,且限于顺序存储结构,(对线性链表无效).
分块查找(索引顺序表的查找)
条件:
- 将表分成几块,且表或者有序,或者分块有序.
- 建立"索引表".
查找过程:先确定待查记录所在块,再再块内查找.
分块查找性能分析
时间效率位于二分查找和顺序查找之间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现