




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、前面我们学习了三种基本数据结构: 一般线性表(数据元素、关系、操作无限制)栈和队列(操作有限制)字符串(数据元素有限制)广义表和数组(参与关系有限制)树和二叉树结构图结构1ADT的定义: 数据结构的逻辑特性; 数据结构上定义的操作;ADT的虚拟实现: 逻辑结构的虚拟实现(存储结构) 操作的虚拟实现(算法); ADT应用举例:讲授的方法: 2前面学习的每一种数据结构都定义了一些常用的操作,如:初始化、访问某数据元素等等,因此,研究操作的实现(不是操作的定义)即算法也是数据结构的范畴。 有两个操作在每个数据结构上、在计算机应用中是非常重要的:其一,确定元素的位置查找;其二,将元素按某种顺序排列分类
2、后面两章我们分别学习这两类操作的算法(思想、效率、优缺点等等);3第九章 查找本章学习各种查找算法,了解算法的思想、效率、优缺点、适用范围等等。4预备知识1、查找:在某一数据集合中查找数据元素是否存 在,若存在,返回其位置,否则,返回 失败信息。2、查找表:被查找数据元素的集合(一般都是一 种数据结构,元素的位置是指在该数 据结构中的逻辑位置,但是查找方法 还依赖与元素的存储,即与存储结构 有关),一般是虚拟实现了的逻辑结 构(数据结构+存储结构)。3、查找表的种类: 静态查找表:数据集合在查找前后不变; 动态查找表:数据集合在查找后会改变;5注意: 查找表一般可以描述为: 数据对象D0:D0
3、是具有相同特性的数据元素的 集合。每个数据元素含有类型相 同的关键字,可唯一标识数据元 素。 数据关系R:数据元素同属一个集合(关系描述)。4、查找方法: 查找表不同,查找方法就会不同。有很多不同的查找方法。65、查找算法的评价: 空间:占用的辅助空间少; 时间:时间少。查找的基本操作是比较,因此 时间主要体现为比较次数。 查找成功: 最大比较次数MSL 平均比较次数ASL 查找失败: 最大比较次数MSL 平均比较次数ASL79.1 静态查找表的查找 静态查找表有很多种,查找方法也不一样,下面介绍几种常见的静态查找表的查找方法。一、静态查找表是顺序或链式存储的线性表 顺序查找1、查找表的要求:
4、线性表2、查找方法:略1、查找表的要求:3、特点: 思想简单,对查找表要求少,适应面广; 比较次数较大O(n); (考虑查找概率不相等时应该如何处理?)8二、静态查找表是顺序存储的、有序的线性表 折半查找(Fibonacci查找、插值查找)1、查找表的要求:顺序存储、有序的线性表2、查找方法:lowhigmid=(low+hig)/2x=Rmid OK!xRmid mid+1higR93、特点: 对查找表要求多; 比较次数较少O(log2n); 折半查找的过程可以用一棵二叉树表示,称之为“折半查找的判定树”。(构造方法自己总结,该树是唯一的吗?)例如: 折半查找在n=11 时的判定树如下:10
5、一般情况下,表长为n的折半查找的判定树的深度和含有n个结点的完全二叉树的深度相同。假设 n=2h-1 并且查找概率相等则:在n50时,可得近似结果:11三、静态查找表是树 静态树查找1、查找表的要求:二叉分类树2、查找方法:X与根比较:相等: OK!X根: 在右子树上找 3、特点: 类似折半,最大是树的深度; 等概率时,折半查找的判定树是最好的; 不等概率时,概率高的应该靠近根。12四、静态查找表是分块索引表 分块查找1、查找表的要求:顺序存储、分块有序2、查找方法:折半方法确定可能在的块;顺序查找确定元素; 3、特点: 要建立索引表; 效率介于折半和顺序之间;139.2 动态查找表的查找 动
6、态二叉分类树的查找1、查找表的要求:二叉分类树2、查找方法:若二叉排序树为空,则查找不成功;否则1)若给定值等于根结点的关键字,则查找成功;2)若给定值小于根结点的关键字,则继续在左 子树上进行查找;3)若给定值大于根结点的关键字,则继续在右 子树上进行查找。14Btreenode * find( Btreenode *BST,elentype x) /在以BST为根指针的二叉排队 树中查找值为x的结点 if ( BST= =NULL) return NULL; /查找失败 else if (BST-data= =x) /查找成功 return BST; else if (BST-datax)
7、 /进入左子树查找 return find ( BST-left,x); else /进入右子树查找 return find (BST-right,x); 153、特点: 与树的深度有关;对于每一棵特定的二叉排序树,均可按照平均查找长度的定义来求它的ASL值,显然,由值相同的n个关键字构造所得的,不同形态的各棵二叉排序树的平均查找长度的值不同,甚至可能差别很大,例如:由关键字序列1,2,3,4,5构造而得的二叉排序树,ASL =(1+2+3+4+5)/ 5 = 3由关键字序列3,1,2,5,4构造而得的二叉排序树,ASL =(1+2+3+2+3)/ 5 = 2.216一般情况下,考虑含有n个关
8、键字可能出现的n!种序列出现的可能性相等。不失一般性,假设某个序列中有k个关键字小于第一个关键字,即有n-k-1个关键字大于第一个关键字,由它构造的二叉排序树的平均查找长度是n和k的函数: P(n, k) (0kn-1)则含n个关键字的二叉排序树的平均查找长度:17而在等概率的情况下,18由此:可类似于解差分方程,此递归方程有解:19从查找的角度看,希望由任意序列生成的二叉排序树,其左、右子树的深度近似相等,但实际上有47%的情况生成的二叉排序树非如此。 那么,如何构造高度比较低的二叉分类树呢?209.3 平衡二叉树一、平衡二叉树的定义1、定义:一棵分类二叉树是平衡的,当且仅当每个结点的左右子
9、树的高度至多相差为1 。由G.M.Adelson_Velskii和E.M.Landis给出的定义AVL树。递归定义:()空树是二叉分类树;()它的左右子树都是二叉分类树,且左右子树的高度最多相差为;、平衡因子:左子树的高度右子树的高度,即 BF(t)=Hl-Hr 平衡二叉树中,对任意结点:BF=、21、平衡二叉树的特点:其深度和log2n同数量级,即树的平均查找长度为O(log2n);4、AVL树的构造和调整过程:()基本原则:按照二叉分类树的构造方法,构造过程中判断是否为平衡二叉树(平衡因子),是,则继续构造;否则,按一定的原则(保持是二叉分类和平衡)将其调整为平衡,然后继续。()插入过程中
10、的调整原则:二叉分类树在插入前平衡,插入一个结点后如果失去平衡,则至少有一个结点的平衡因子变为或。若平衡因子,则左分支高于右分支;若平衡因子,则右分支高于左分支;22失去平衡的四种情况:型:左分支的左子树上插入,使之失去平衡因子平衡因子;BF=1BF=0BF=2BF=1BF=0插入BF=BF=BF=0特殊地:23BlBrArh-1h-1BF=1BF=0BlBrArh-1h-1BF=BF=插入BlBrArh-1h-1BF=hBF=024型:右分支的右子树上插入,使之失去平衡因子平衡因子;BF=-1BF=0插入CABF=BF=BF=0特殊地:BF=-2BF=0BF=-125BlBrAlh-1h-1
11、BF=-1BF=0插入BlBrAlh-1h-1BF=-2BF=-1BrAlBlhh-1BF=h-1BF=026型:左分支的右子树上插入,使之失去平衡因子平衡因子;BF=1BF=0BF=2BF=1BF=0插入BF=BF=BF=0特殊地:BF=2BF=1BF=027插入BlClArh-1h-2BF=1BF=0CrBlClArh-1h-1BF=2BF=0Cr28BlClArh-1h-1BF=0BF=0CrBF=-1BlClArh-1h-1BF=2BF=1Crh-129L型:右分支的左子树上插入,使之失去平衡因子平衡因子;BF=-1BF=0插入BCABF=BF=BF=0特殊地:BF=-2BF=0BF=
12、BF=-2BF=0BF=-130插入BrClAlh-1h-2BF=1BF=0Crh-1BF=0BrClAlh-1h-1BF=-2BF=1Crh-1BF=131BrClAlh-1h-1BF=-2BF=-1Crh-1BF=-1BrClAlh-1h-1BF=0BF=-1Crh-1BF=032略(参见教材236-238)5、算法:336、举例:有下列元素,构造平衡二叉树 13,24,37,90,53132437RR型2413373413,24,37,90,532413379053RL型2413375390533790359.3 平衡二叉树二、平衡二叉树的查找1、查找过程:同二叉分类树一样!、效率分析:
13、 查找过程中和给定值进行比较的关键字的个数不超过平衡树的深度。 假设深度为h的二叉平衡树上所含结点数的最小值为Nh,则显然 Nh = Nh-1 + Nh-2 + 1由此可以推导出:hlog(n)因此,在平衡树上进行查找的时间复杂度为O(log(n)369.4 哈希查找一、哈希技术介绍1、哈希技术的提出背景: 一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较次数。 “哈希”是英文HASH的音译,又翻译作“散列”、“杂凑”等。那么
14、,有没有不用比较的查找方法?379.4 哈希查找 理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。 因此,如果有一个函数,它能够根据要查找的关键字直接计算出要查找记录的地址,该地址的内容为空,则查找的元素不存在,否则,查找成功。显然,这样的查找不需要比较!基于这种思想的技术就是HASH技术;389.4 哈希查找 哈希表最常见的例子是以学生学号为关键字的成绩表,号学生的记录位置在第一条, 2号学生的记录位置在第二条, 号学生的记录位置在第条. 如果我们以学生姓名为关键字,如何建立查找表,使得根据姓名
15、可以直接找到相应记录呢?其次,我们取姓名各个字的拼音字头字母的编号和为该记录的存储位置,例如吴军,wj=33,存储位置33;吴晓燕,wxy=72,存储位置为72;a1b2c3d4e5f6g7h8i9j10k11l12m13n14o15p16q17r18s19t20u21v22w23x24y25z26首先,我们规定每个字母的编号:399.4 哈希查找显然存储地址从378。如果76个学生的姓名的拼音字头字母都互不相同,则我们可以按这种方式存储这些学生的信息,而且很容易的查找一个学生的信息。例如:要查吴晓燕的信息,则计算wxy=72,第72个位置存储的就是该学生的信息。如果我们有m个空间,n个数据元
16、素,n=m,且每个数据元素能按某种映射关系得到唯一的空间地址,则我们很容易的实现查找!但是,千万不要忘了我们假设的前提: 互不相同!例如,如果学生中还有一个学生姓名为王新云,wxy=72怎么办?409.4 哈希查找一、哈希技术介绍2、什么情况下使用HASH技术? 如果问题的数据元素已知,很容易地建立数据元素和存储地址之间的一一映射函数关系,HASH技术是很简单的,HASH技术也就失去了意义,实际上HSAH技术是针对下类问题的: 问题的数据元素的可用集合很大,而一个问题的具体数据元素是取自该可用集合的一个很小的任意一个集合,因此,解决问题时需要的空间大小是根据小集合大小确定的,但是,如果要建立函
17、数映射,函数的定义域应该是大集合,而值域是由小集合确定的,因此建立这样的一一映射是很困难的,所以才有了HASH技术。419.4 哈希查找一、哈希技术介绍3、HASH类问题的描述:假设问题可能用到的关键字集合为U,|U|=n0,即该集合的元素个数为n0,而一个问题实际用到的关键字集合为S,|S|=n,nn0,且S是取自U的任意一个子集合,表示为R1,R2,R3,.Rn,其关键字集合为K1,K2,.,Kn;T是解决问题需要的连续空间,它由m个存储单元组成,表示为T0.m-1,mn。有一个函数H,其定义域是keyU,值域是i 0.m-1,它将关键字映射到存储空间地址上; H(key)= i key
18、U, i0.m-1429.4 哈希查找一、哈希技术介绍12nnn0H439.4 哈希查找一、哈希技术介绍4、有关基本概念:(1)HASH函数:将关键字映射到存储空间地址的函数, 记作:H(key)(2)HASH地址:由HSAH函数计算出的关键字地址;(3)HASH表:存储记录的连续地址空间T;(4)HASH造表:利用HASH函数将记录存储到HASH表 中的过程;(5)HASH表的填充度(装填因子): 表中填入的记录数 = HASH表的长度449.4 哈希查找一、哈希技术介绍(6)冲突:由于HASH函数的定义域是U,而S是U的任 意一个小子集,映射地址空间是由S的大小 确定的,因此,对于不同的关
19、键字可能得到 相同的HASH地址,即: 若 key1key2 , 而 H(key1)=H(key2),则称为 冲突。 (7)同义词: 若 H(key1)=H(key2),则key1和key2互称 为同义词。5、HASH技术的关键: HASH函数的构造 解决冲突的方法459.4 哈希查找一、哈希技术介绍5、HASH问题举例:我们写程序时,可以用的标识符是一个很大集合(U)因为凡是符合语言词法定义的都是合法、可用的标识符,但是对于你写的每一个程序,真正使用到的标识符却是一个很小的子集(S),编译程序存储和处理程序时只要能存储和处理任意的小子集S即可,但是,要注意S的特点!例如:标准PASCAL的标
20、识符为字母开头的8个长度的字母数字串,则|U|=C(26,1)*C(36,1)*7=1.093881012,而一个程序中可能出现的标识符不会太多,1000足矣!即|S|=1000。469.4 哈希查找二、哈希函数的构造方法1、直接定址法: H(key)=key 或 H(key)=a*key+b a,b为常数特点: * 关键字必须是整数; * 地址集合和关键字集合大小相同,没有冲突; * 空间浪费大;2、数字分析法: H(key)=关键字的某进制的若干位组成特点: * 要求关键字已知; * 取几位,哪几位的原则是尽量避免冲突, 均匀性好;479.4 哈希查找3、平方取中法: H(key)=关键字
21、平方后的中间几位4、折叠法: H(key)=将关键字分割成位数相同的几部分,然后取 这几部分的叠加和(舍去进位) 特点:这是一种较常用的方法。 * 关键字不一定全部知道; * 由于一个数平方后的中间几位和数的每一位相关, 均匀性较好,取的位数与表长有关; * 乘和截取的代价较高;特点: * 关键字位数很多,而且关键字中每一位上数字 分布大致均匀时,均匀性很好;489.4 哈希查找5、除留余法: H(key)= key MOD P P是不大于m的素数,m是 HASH表的长度; 6、随机数法: H(key)= Random(key); Random位随机函数特点:这是一种最简单、最常用的方法。 *
22、 P的选择很重要,选择不好会产生同义词; * P一般取位素数或不包含小于20的质数的合数;HASH函数考虑的因素: (1)计算HASH函数的时间; (2)关键字的长度; (3)HASH表的长度; (4)关键字的分布情况; (5)记录的查找频率;499.4 哈希查找三、冲突的解决方法1、开放定址法:(闭散列) 发生冲突后,按一定的原则寻找新的地址: Hi=(H(key)+di) MOD m i=1,2,.,k di为增量,m为HASH表的长度; di的取法: 线性探测:di=1,2,3,.,m-1 二次探测:di=12,-12,22,-22,.,k2 解决冲突的策略分为两类:(1) 闭散列方法(
23、Closed Hashing):同义词放在HASH表 的其他位置;(Open addressing,又称为开地址法)(2) 闭散列方法(Open Hashing):同义词放在HASH表 之外的空间中;(Separate chaining,又称为拉链法)509.4 哈希查找三、冲突的解决方法2、再造HASH法:(闭散列) Hi=RHi(key) 用一系列HASH函数计算地址 3、链地址法:(开散列) 将同义词存放在同一个链表中; 012m-1519.4 哈希查找4、建立公共溢出区法: 除了HASH表外,开辟一个公共溢出区,一旦冲突,将同义词放入公共溢出区; HASH表:0 1 2 m-10 1 2 v溢出表:529.4 哈希查找四、哈希查找1、哈希查找的方法给定关键字 k : (1)用给定的HASH函数计算出k的HASH地址; i=H(key) (2)若该地址为空,则查找失败; 否则,若 Ti=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届江苏省大丰市新丰中学高三第一次模拟考试化学试卷含解析
- 图书角管理制度
- 2025年太阳能发电机组合作协议书
- 2025届浙江省杭州市塘栖中学高三最后一卷化学试卷含解析
- 2025年船用推进电机项目建议书
- 四年级数学(四则混合运算带括号)计算题专项练习与答案
- 一年级数学计算题专项练习1000题集锦
- 2025年探照灯抛物面反射镜和保护镜系列项目发展计划
- 2025年木板材加工项目建议书
- 戒毒学员出所前的心理教育
- 金属冶炼中的铍冶炼与铍合金生产
- 加气站安全生产奖惩规定模版(3篇)
- 细胞治疗政策环境分析-洞察分析
- 2025年河南郑州医药健康职业学院招考聘用高频重点提升(共500题)附带答案详解
- 公园景观修复零星维修施工方案
- 《控制器接口》课件
- 超全自考英语二词汇表-含音标4500-个单词
- 外墙脚手架施工方案完整版
- 安徽省宿州市省、市示范高中2024-2025学年高一上学期期中教学质量检测英语试题 含解析
- 《驾驶室固定矩形窗》
- 境外工程项目安全生产管理规定
评论
0/150
提交评论