数据结构-查找

一、查找
1、概述
查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。
查找表:对要查找的一组数据,组成成线性,树形,图形等数据结构的查找表,查找表不是一种新的数据结构。不同结构的查找操作有不同的查找效率。如mysql中的索引结构,是一种树形结构。
关键字:数据元素中唯一标识该元素的某个数据项的值,如sql表中一条记录的id值,微信关系图中的微信号。

2.操作
只进行查找符合条件的数据元素操作,即静态查找表,只需关注查找速度即可。
查找之后需要进行插入和删除操作,即动态查找表,除了关注查找速度外,还需关注插入删除是否方便。

3.查找算法的评价指标(重点)
查找长度:在查找运算中,需要对比关键字的次数称为查找长度。
平均查找长度(ASL):所有查找过程中进行关键字的比较次数的平均值。
评价一个查找算法的效率时,通常考虑查找成功/查找失败两种情况的ASL。
ASL的数量级反应了查找算法的时间复杂度。

二、线性查找之顺序查找
1.算法思想
对一组数据采用线性结构,表中数据元素顺序未知,查找数组中的指定关键字。
可用顺序表或链表线性结构,循环数据对比关键字,直到查出或查完为止。

2.算法实现
循环对比数据元素,查找成功返回数据下标;查找失败返回-1。

查找成功:第一次就查找成功,对比关键字1次。最后才查找成功,对比关键字n次。
平均查找长度为:1+2+3+......+ n =  (n+1) /2 。 时间复杂度:O(n)
查找失败:对比n+1次。

3.算法优化
A 对表中元素有序时,采用顺序查找
当前关键字大于目标关键字时,即查找失败。查找失败的ASL更少。

查找判定树:成功结点的关键字对比次数 = 结点所在层数
失败结点的关键字对比次数 = 其父结点所在层数

B 表中各个关键字被查概率不同时,采用顺序查找
按被查概率降序排列,查找成功时ASL更少


 

三、折半查找
1.算法思想
又称“二分查找”,仅适用于有序顺序表
表中元素有序,分别找到顺序表头,尾,和中间元素。比中间元素大在右半区域,比中间元素小在左半区域。确定左右后,再进行二分查找。

2.算法实现

3.查找判定树

4.折半查找效率

四、分块查找
1.算法思想
对于块内无序,块间有序的记录表,可以采用分块查找。
构造一索引表,记录每个分块的最大关键字和分块的存储区间。int maxValue; int low,high;

分块查找,又称索引顺序查找,索引表中(块间有序)确定待查记录所属分块,可顺序或折半。
在块内(无序)顺序查找。
注意:若索引表中不包含目标关键字,则折半查找索引表最终停在low>high,要在low所指分块中查找。

 

2.查找效率分析(ASL)

五、B树与B+树

六、散列查找

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值