一、查找
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+树
六、散列查找