算法13-静态查找表.ppt
《算法13-静态查找表.ppt》由会员分享,可在线阅读,更多相关《算法13-静态查找表.ppt(53页珍藏版)》请在三一办公上搜索。
1、,第8章 查找,2,本章主要内容8.1 静态查找表8.2 动态查找表8.3 哈希表,3,基本概念,1什么是查找表 是由同一类型的数据元素(或记录)组成的数据集合。2.对查找表经常进行的操作1)查询某个“特定的”数据元素是否在查找表中;2)检索某个“特定的”数据元素的各种属性;3)在查找表中插入一个数据元素;4)从查找表中删去某个数据元素。,4,3.查找表分类,动态查找表,静态查找表,4.关键字 是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。若此关键字可以识别唯一的一个记录,则称之谓“主关键字”。若此关键字能识别若干记录,则称之谓“次关键字”。,5,5.查找,根据
2、给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。若查找表中存在这样一个记录,则称“查找成功”,查找结果:给出整个记录的信息,或指示该记录在查找表中的位置;否则称“查找不成功”,查找结果:给出“空记录”或“空指针”。,例:高考成绩表示,typedef float KeyType;/实型typedef int KeyType;/整型typedef char*KeyType;/字符串型数据元素类型定义为:typedef struct KeyType key;/关键字域/其它域ElemType;。,典型的关键字类型说明:,对两个关键字的比较约定为如下的宏定义:/对数值型关键字#
3、define EQ(a,b)(a)=(b)#define LT(a,b)(a)(b)#define LQ(a,b)(a)=(b)/对字符串型关键字#define EQ(a,b)(!Strcmp(a),(b)#define LT(a,b)(Strcmp(a),(b)0)#define LQ(a,b)(Strcmp(a),(b)=0),典型的关键字类型说明:,对两个关键字的比较约定为如下的宏定义:/对数值型关键字#define EQ(a,b)(a)=(b)#define LT(a,b)(a)(b)#define LQ(a,b)(a)=(b)/对字符串型关键字#define EQ(a,b)(!Str
4、cmp(a),(b)#define LT(a,b)(Strcmp(a),(b)0)#define LQ(a,b)(Strcmp(a),(b)=0),典型的关键字类型说明:,静态查找数据类型定义:ADT StaticSearchTable 数据对象D:D是具有相同特性的数据元素的集合。各个数据元素均含有 类型相同,可唯一标识数据元素的关键字。数据关系R:数据元素同属一个集合。,8.1静态查找表,8.1.1顺序表的查找,/静态查找表的顺序存储结构:typedef struct ElemType*elem;/数据元素存储空间基址,建表时按实长度分配,0号单 元留空int length;/表长度SST
5、able;,8.1.1顺序表的查找,int Search_Seq(SSTable ST,KeyType key)ST.elem 0.key=key;/“哨兵”for(i=ST.length;!EQ(ST.elemI.key,key);i);/从后往前找Return i;/找不到时,i 为0/Search_Seq,“顺序”的含义:从表尾(或表头)开始以顺序方式搜索查找表,将关键字与给定值进行比较。查找的顺序与数据元素的存储位置有关系,与数据元素的值没有关系。,ST.elem,回顾顺序表的查找过程:,假设给定值 e=64,要求 ST.elemi=e,i=?,20,7,ST.elem,ST.elem
6、,60,kval=64,kval=60,64,哨兵,改进,查找成功时平均查找长度(A S L)为确定记录在查找表中的位置,需和给定值 进行比较的关键字个数的期望值 其中:n 为表长,Pi 为查找表中第i个记录的查找概率,且 Ci为找到该记录时,曾和给定值比较过的关键字的个数。,分析顺序查找的时间性能,在等概率查找的情况下,顺序表查找的平均查找长度为:,ASL=nP1+(n-1)P2+2Pn-1+Pn,对顺序表 a1,a2,an 而言:C1=n,Ci=n-i+1,Cn=1,如果查找概率无法事先测定,则查找过程采取的改进办法是,(1)在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上;(2)每
7、个记录附设一访问频度域,按访问频度非递减有序排列。,在不等概率查找的情况下,如果 已知每个数据元素的概率,则当 PnPn-1P2P1 时,ASLss取极小值,即:为提高查找效率,,概率大的记录应该放在表尾!,2 有序表的查找:折半查找(二分法查找),1)算法思想:要求n个记录存放在一个顺序表L中,并按其关键码从小到大排好了序,称此表为有序表。先求位于查找区间正中的记录的下标mid,用其关键码与给定值x比较:Lmid.Key=x,查找成功;Lmid.Key x,把查找区间缩小到表的前半部分,再继续进行对分查找;Lmid.Key x,把查找区间缩小到表的后半部分,再继续进行对分查找。每比较一次,查
8、找区间缩小一半。如果查找区间已缩小到一个记录,仍未找到想要查找的记录,则查找失败。,2 有序表的查找:折半查找(二分法查找),折半查找算法描述,int Search_Bin(SSTable ST,KeyType key)/在有序表ST中折半查找其关键字等于key的数据元素。/若找到,则函数值为该元素在表中的位置,否则为0。low=1;high=ST.length;/置区间初值while(low=high)mid=(low+high)/2;if(key=ST.elemmid.key)return mid;/找到待查元素 else if(key ST.elemmid.key)high=mid-1;
9、/继续在前半区间进行查找 else low=mid+1;/继续在后半区间进行查找return 0;/顺序表中不存在待查元素/Search_Bin,从折半查找法可知:找到第6个数仅需比较1次,找到第3和第9个数需2次,找到第1,4,7,10个数需3次,找到第2,5,8和11个数需4次。查找过程可以用下图的二叉树来表示。查找某个结点所比较的次数等于该结点的层次数。实际上查找某个结点的过程就是从根结点到相应的结点的路径。,查找成功时进行比较的次数最多不超过该树的深度。而具有n个结点的判定树的深度为log2n1。所以折半查找法在查找成功时的比较次数最多为log2n+1次。如果考虑到查找不成功的情况,则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 13 静态 查找

链接地址:https://www.31ppt.com/p-6329355.html