




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九章 查找,查找表 是由同一类型的数据元素(或记录)构成的集合。 对查找表经常进行的操作: 1)查询某个“特定的”数据元素是否在查找表中; 2)检索某个“特定的”数据元素的各种属性; 3)在查找表中插入一个数据元素; 4)从查找表中删去某个数据元素。 静态查找表 仅作上述1)和2)操作的查找表 动态查找表 有时在查询之后,还需要将“查询”结果为“不在查找表中”的 数据元素插入查找表;或者,从查找表中删除其“查询”结果为 “在查找表中”的数据元素.,查找- 根据给定的某个值,在查找表中确定一个其关键字等于给 定值的数据元素或(记录). 找到:查找成功 找不到:查找失败 主关键字-能唯一确定结点
2、的一个或多个域。 平均查找长度(ASL)-查找一个结点所作的平均比较次数 (ASL是衡量一个查找算法优劣的主要标准)。 如何进行查找? 取决于查找表的结构,即:记录在查找表中所处的位置。 然而,查找表本身是一种很松散的结构,因此,为了提高查找 的效率,用另外一种结构来表示查找表。 本章讨论的重点: 查找表的各种表示方法及其相应的查找算法,9.1 静态表的查找,9.1.1 顺序查找 一、算法思想: 从表的一端开始,用给定值k与表中各个结点的 关键字逐个比较。 查找成功-找出相等的值; 查找失败-已到达表的另一端,即表中所有结点 的关键字值都不等于k。 提示: 可在此设置一个监视哨,作为下标越界的
3、条件。,二、示例,r0:为监视哨。 视哨的作用:作为越界(即已查完)的检测条省去在循环 中每次均要判定是否越界,从而节省比较的时间。,三、存储结构 key info typedef struct keytype key; . sstable;,k1,k2,k3,kn,0 1 2 3 n,四、顺序查找算法: int search(sstable r ,int n,keytype k) /在n个结点的顺序表r1.rn中查找关键字 k int i =n;/从表尾开始向前查找 r0.key=k;/设置监视哨 while(ri.key!=k) i-; return(i); ,五、算法分析 (1)查找成功
4、的平均查找长度(在等概率的前提下) ASL=(1+2+n)/n =(n+1)/2。 (2)查找失败的平均查找长度 n+1 。 六、顺序查找的特点: (1)算法简单,对线性表的逻辑次序无要求; (2)存储结构可采用顺序或链式存储结构均可,但其平均 查找长度较大, 均为:(n+1)/2。,思考题:,(1)表有序时,查找成功和失败的平均查找长度与表无序时是 否相同?算法怎么改进? (2)次关键的查找(表中有多个关键字值相同时的查找如何进 行)? (3)多关键字的查找? (4)用单链表为存储结构,实现时有何考虑? (5)顺序查找的适用范围?,9.1.2 二分(折半)查找,一、二分查找的先决条件 表中结
5、点必须按关键字有序且采用顺序存储。 二、二分法思想:取中,比较 (1)用给定的k与有序表的中间位置mid上的结 点的关键字比较,若相等,查完;否则: (2)若rmid.keyk,则在左子表中继续进行二 分查找;若(rmid.keyk),则执行在右子 表中继续进行二分查找。,12,21,30,35,38,40,48,55,56,60,64,二分法查找示例 (1)k=35 1 2 3 4 5 6 7 8 9 10 11,i=1,j=11,i,j,m,12,21,30,35,38,40,48,55,56,60,64,二分法查找示例 (1)k=35 1 2 3 4 5 6 7 8 9 10 11,i=
6、1,j=11, m=(i+j)/2=6。 rmk : 在左半部分继续查找。,i,j,12,21,30,35,38,40,48,55,56,60,64,二分法查找示例 (1)k=35 1 2 3 4 5 6 7 8 9 10 11,i=1,j=11, m=(i+j)/2=6。 rmk : 在左半部分继续查找。 i=1,j=m-1=5,i,j,12,21,30,35,38,40,48,55,56,60,64,二分法查找示例 (1)k=35 1 2 3 4 5 6 7 8 9 10 11,i=1,j=11, m=(i+j)/2=6。 rmk : 在左半部分继续查找。 i=1,j=m-1=5, m=(
7、i+j)/2=3。 rmk : 在右半部分继续查找。,i,j,m,12,21,30,35,38,40,48,55,56,60,64,二分法查找示例 (1)k=35 1 2 3 4 5 6 7 8 9 10 11,i=1,j=11, m=(i+j)/2=6。 rmk : 在左半部分继续查找。 i=1,j=m-1=5, m=(i+j)/2=3。 rmk : 在右半部分继续查找。 i=m+1=4, j=5,i,j,12,21,30,35,38,40,48,55,56,60,64,二分法查找示例 (1)k=35 1 2 3 4 5 6 7 8 9 10 11,i=1,j=11, m=(i+j)/2=6
8、。 rmk : 在左半部分继续查找。 i=1,j=m-1=5, m=(i+j)/2=3。 rmk : 在右半部分继续查找。 i=m+1=4, j=5, m=(i+j)/2=4。 rm=k :查找成功。,i,j,m,12,21,30,35,38,40,48,55,56,60,64,二分法查找示例 (2)k=50 1 2 3 4 5 6 7 8 9 10 11 i=1,j=11, m=(i+j)/2=6。 rmk : 在左半部分继续查找。 i=7, j=m-1=8, m=(i+j)/2=7。 rmk : 在左半部分继续查找。 i=8, j=m-1=7 , ij: 查找失败,三、算法描述,int S
9、earch_bin (sstable r, int n, keytype k) / r1.rn 是按key排序的n个元素,在表中查找 k i=1 ; j=n ; while ( i=j ) mid=(i+j)/2 ; /取中 if ( k= = rmid.key ) return (mid) ; / 查找成功 else if ( k rmid.key ) j=mid-1; /在左半部分继续查找 else i=mid+1; /在右半部分继续查找 return(0); ,四、二分查找判定树(以11个结点为例) ASL=(1+2*2+4*3+4*4)/11 =3 T(n)=O(log2n),思考: (1)为什么不采用链式结构? (2)查找不成功时,ASL=? (3)当表长n很大,表中需要进行插入和删除时,有没 有更好的改进措施? (4)若是非等概率情形,二分查找算法最优吗?,9.1.3 静态树表的查找 (1)建立静态树表 关键字 A B C D E F G H I 出现次数 1 1 2 5 3 4 4 3 5 27 25 22 15 7 0 8 15 23,(2)查找方法同二叉排序树。,9.1.3 索引顺序表的查找 索引顺序查找,又称分块查找。它是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 开业做活动推广活动方案
- 幼儿园医生课程活动方案
- 幼儿园溺水安全活动方案
- 幼儿园春晚排练活动方案
- 幼儿园农场活动方案
- 广场商场国庆活动方案
- 幼儿园小学合作活动方案
- 2024年吉林省四平市第14中学数学七年级第一学期期末经典模拟试题含解析
- 幼师美食活动方案
- 幼儿演出打卡活动方案
- 多模态学习算法的实证分析及其未来发展趋势
- 核电站清洁维护派遣及环境监测服务合同
- 口腔合伙股东协议书
- 教育改革与未来教育趋势-教育改革议题与未来
- 行政管理学科试题及答案分享
- 签约抖音博主合同协议
- 江苏南通2025年公开招聘农村(村务)工作者笔试题带答案分析
- 《公司法教学课件》课件
- 房屋停租合同协议
- 银行客户分类管理
- 区域保护合同协议
评论
0/150
提交评论