ImageVerifierCode 换一换
格式:PPT , 页数:72 ,大小:2.16MB ,
资源ID:1081626      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1081626.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构与算法教学课件ppt作者王曙燕chapter8查找.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构与算法教学课件ppt作者王曙燕chapter8查找.ppt

1、1,数 据 结 构 与 算 法,8.1 概述,第 8 章 查找,8.2 基于线性表的查找法,8.3 基于树的查找法,8.4 散列,8.5 算法总结,2,8.1 概述,第 8 章 查找,查找表是由同一类型的数据元素(或记录)构成的集合。,由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。,数 据 结 构 与 算 法,3,第 8 章 查找,对查找表常进行的操作:,1)查询某个“特定的”数据元素是否在查找表中,3)在查找表中插入一个数据元素,2)检索某个“特定的”数据元素的各种属性,4)从查找表中删去某个数据元素,数 据 结 构 与 算 法,8.1 概述,4,第 8 章

2、查找,查找表的分类,仅作查询和检索操作,静态查找表,“不在查找表中”的数据元素插入到查找表中;删除其“查询”结果为“在查找表中”的数据元素。,动态查找表,查找还可分为:内查找和外查找。,8.1 概述,5,第 8 章 查找,关键字:是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。,主关键字:可以识别唯一的一个记录的关键字。,次关键字:可以识别若干记录的关键字。,8.1 概述,6,根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(记录)。,查找,若查找表中存在这样一个记录,则称“查找成功”。查找结果给出整个记录的信息,或指示该记录在查找表中的位置;否则

3、称“查找不成功”。查找结果给出“空记录”或“空指针”。,第 8 章 查找,8.1 概述,7,由于查找表中的数据元素之间不存在明显的组织规律,因此不便于查找。为了提高查找的效率,需要在查找表中的元素之间人为地附加某种确定的关系,换句话说,用另外一种结构来表示查找表。,如何进行查找?,查找的方法取决于查找表的结构。,第 8 章 查找,8.1 概述,8,8.2 基于线性表的查找,第 8 章 查找,顺序查找,折半查找,分块查找,9,数 据 结 构,8.2 基于线性表的查找,第 8 章 查找,顺序查找,key=64,key=60,结果:查找成功,返回位置7,结果:查找不成功,int SeqSearch(

4、RecordList l,KeyType k)int i;i=l.length;while(i=1,10,8.2 基于线性表的查找,第 8 章 查找,顺序查找,key=64,key=60,结果:查找成功,返回位置7,结果:查找不成功,64,60,int SeqSearch(RecordList l,KeyType k)int i;l.r0.key=k;/*标识边界*/i=l.length;while(l.ri.key!=k)i-;return(i);,技巧:r0起到监视哨兵的作用,可免去检查表是否查完,且提高算法的执行效率,但并不是真正的待查找记录。,11,8.2 基于线性表的查找,第 8 章

5、 查找,顺序查找,分析查找的时间性能:,查找算法的平均查找长度(Average Search Length),为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值(查找成功时),12,在等概率查找的情况下,顺序表查找成功的平均查找长度为:Pi=1/n,对顺序表而言,Ci=n-i+1,ASL=nP1+(n-1)P2+2Pn-1+Pn,8.2 基于线性表的查找,第 8 章 查找,若查找概率无法事先测定,则查找过程采取的改进办法是,附设一个访问频度域或者在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上。,顺序查找,13,8.2 基于线性表的查找,第 8 章 查找,数 据 结 构,

6、折半查找,顺序查找的查找算法简单,但平均查找长度较大,特别不适用于表长较大的查找表。,若以有序表表示查找表,则查找过程可以基于“折半”进行。,14,8.2 基于线性表的查找,第 8 章 查找,折半查找,1.首先确定查找表的中间位置;,2.然后将待查的值与中间位置的值进行比较,若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二分查找。,基本思想:,15,8.2 基于线性表的查找,第 8 章 查找,折半查找,例1:key=64 的查找过程如下:,low=1,low 指示查找区间的下界,high=11,mid=(1+11)/2=6,keymid指向的记录值,low=mid+1=7,mid

7、=(7+11)/2=9,keymid指向的记录值,high=mid-1=8,mid=(8+7)/2=7,key=mid所指向的记录值 查找成功,举例:,high 指示查找区间的上界,mid=(low+high)/2,70,highlow 查找不成功,16,8.2 基于线性表的查找,第 8 章 查找,折半查找,算法,int BinSrch(RecordList l,KeyType k)int low=1,high=l.length,mid;while(low=high)mid=(low+high)/2;if(k=l.rmid.key)return mid;else if(kl.rmid.key)

8、high=mid-1;else low=mid+1;return 0;,17,8.2 基于线性表的查找,第 8 章 查找,折半查找,先看一个具体的情况,假设:n=11,判定树,3,4,2,3,4,1,3,4,2,3,4,3,1,4,9,6,7,10,2,8,11,5,找到有序表中任一记录的过程就是走了一条从根结点到与该记录相应的结点的路径,给定值进行比较的关键字个数恰是该结点在判定树上的层次数。,ASLsuccss=(11+22+43+44)/11=33/11ASLunsucc=(44+85)/12=56/12折半查找的判定树是唯一的。,平均查找长度,18,8.2 基于线性表的查找,第 8 章

9、 查找,折半查找,平均查找长度,一般情况下,表长为n的折半查找的判定树的深度和含有n个结点的完全二叉树的深度相同。,假设 n=2h-1 并且查找概率相等,则,=(n+1)/n*log2(n+1)-1,在n50时,可得近似结果 log2(n+1)-1,折半查找只适用于有序表,且限于顺序存储结构,19,8.2 基于线性表的查找,第 8 章 查找,分块查找,(索引顺序查找),基本思想:,1、把线性表分成若干块,每块包含若干个记录,在每一块中记录的存放是任意的,但块与块之间必须有序。(分块有序),2、建立一个索引表,把每块中的最大关键字值及每块的第一个记录在表中的位置和最后一个记录在表中的位置存放在索

10、引项中。,20,索 引 表,8.2 基于线性表的查找,第 8 章 查找,分块查找,(索引顺序查找),21,8.2 基于线性表的查找,第 8 章 查找,分块查找,(索引顺序查找),索引顺序表的查找过程:,1)由索引确定记录所在区间(块);,2)在某个区间(块)内进行顺序查找。,注意:索引可以根据查找表的特点来构造。,可见,分块查找的过程也是一个“缩小区间”的查找过程。,分块查找的平均比较次数=查找“索引”的平均比较次数+查找“块内”的平均比较次数,22,第 8 章 查找,8.2 基于线性表的查找,线性表的三种查找方法比较,因此,对于不同的表长n、不同的表结构和表存储结构,应采用不同的查找方法。,

11、23,第 8 章 查找,8.3 基于树的查找,二叉排序树,二叉平衡树,B-树,B+树,键树,24,第 8 章 查找,8.3 基于树的查找,二叉排序树,定义:,二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:,1.若它的左子树不空,则左子树上所有 结点的值均小于根结点的值;,3.它的左、右子树也都分别是二叉排序树。,2.若它的右子树不空,则右子树上所有 结点的值均大于根结点的值;,25,第 8 章 查找,8.3 基于树的查找,例如:,是二叉排序树。,66,不,二叉排序树,26,第 8 章 查找,8.3 基于树的查找,二叉排序树,查找算法,若给定值等于根结点的关键字,则查找成功;若给定值小于

12、根结点的关键字,则继续在左子树上进行查找;若给定值大于根结点的关键字,则继续在右子树上进行查找。,否则,,若二叉排序树为空,则查找不成功;,在二叉排序树上进行查找,类似折半查找,27,第 8 章 查找,8.3 基于树的查找,例如:,二叉排序树,查找关键字,=50,35,90,95,30,80,20,90,85,40,35,88,32,50,50,30,40,35,50,80,90,二叉排序树,查找算法,失败,28,第 8 章 查找,8.3 基于树的查找,从上述查找过程可见,在查找过程中,生成了一条查找路径:,从根结点出发,沿着左分支或右分支逐层向下直至关键字等于给定值的结点;,从根结点出发,沿

13、着左分支或右分支逐层向下直至指针指向空树为止。,查找成功,查找不成功,二叉排序树,查找算法,29,BSTree SearchBST(BSTree bst,KeyType key)if(!bst)return NULL;else if(bst-key=key)return bst;else if(key key)return SearchBST(bst-lchild,key);else return SearchBST(bst-rchild,key);,第 8 章 查找,8.3 基于树的查找,二叉排序树,查找算法,-递归,30,二叉排序树,查找算法,-非递归,第 8 章 查找,8.3 基于树的查

14、找,BSTree SearchBST(BSTree bst,KeyType key)BSTree q;q=bst;while(q)if(q-key=k)return q;if(key data.key)q=q-lchild;else q=q-rchild;return NULL;,31,二叉排序树,插入算法,第 8 章 查找,8.3 基于树的查找,根据动态查找表的定义,“插入”操作在查找不成功时才进行;,若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。,32,48,二叉排序树,插入算法,第 8 章 查找,8.3 基于树的查找,设

15、 key=30,30,48,33,二叉排序树,插入算法,第 8 章 查找,8.3 基于树的查找,void InsertBST(BSTree*bst,KeyType key)BiTree s;if(*bst=NULL)s=(BSTree)malloc(sizeof(BSTNode);s-key=key;s-lchild=NULL;s-rchild=NULL;*bst=s;else if(key key)InsertBST(,34,二叉排序树,生成算法,第 8 章 查找,8.3 基于树的查找,例如:设关键字输入顺序为:45,24,53,12,28,90,28,12,53,24,45,90,24,4

16、5,53,90,12,28,28,90,45,12,24,53,所以,二叉排序树的形态完全由一个输入序列决定,一个无序序列可以通过构造一棵二叉排序树而得到一个有序序列。,35,void CreateBST(BSTree*bst)KeyType key;*bst=NULL;scanf(%d,二叉排序树,生成算法,第 8 章 查找,8.3 基于树的查找,36,二叉排序树特点:,1.中序遍历二叉排序树可得到关键字有序序列。2.在构造二叉排序树时,每次插入的新结点都是新的叶子结点,则进行插入时,不必移动其它结点。3.二叉排序树不但拥有类似于折半查找的特性,又采用了链表作存储结构,因此是动态查找表的一种适宜表示。,中序遍历:,10,20,23,25,30,35,40,48,第 8 章 查找,8.3 基于树的查找,37,二叉排序树,删除算法,第 8 章 查找,8.3 基于树的查找,和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。,可分三种情况讨论:,(1)被删除的结点是叶子;,(2)被删除的结点只有左子树或者只有右子树;,(3)被删除的结点既有

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1