版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 典型查找算法,顺序查找、折半查找和分块查找的方法和算法,相应的平均查找长度 二叉排序树查找方法和算法,二叉平衡树概念 散列表的概念,散列函数的构造方法,处理冲突的方法及散列表各种运算的实现算法,第8章 典型查找算法,8.1 实例:学生分配座位 8.2 静态查找 8.3 动态查找 8.4 散列查找 本章总结,8.1 实例:学生分配座位,8.1.1 问题描述 8.1.2 问题的分析 8.1.3 实现算法 8.1.4 基本概念,8.1.1 问题描述,教室中的学生座位分配是一个最简单的例子。假定某教室有35个座位,如果不加限定任意就坐或按某种规律就座,则要查找某学生时就要将待查找的学生与当前座
2、位上的学生进行比较。,8.1.2 问题的分析,用计算机来解决查找学生问题,通常需要做以下工作: 第一,学生信息以什么形式表示和存储; 第二,查找的具体实现方法(算法)。,struct student int num1; / 表示座号 int num2; / 表示学号 char name12; / 表示姓名 ; struct list Student stusize; /保存学生记录 Int len; /学生人数 ;,学生信息的存储方式:,从第一个学生开始,依次与查找的学生进行比较。在查找过程中,若某个学生的记录与所查找学生记录相等,则查找成功,返回该学生在表中位置;若全部比较完毕,没有符合条件
3、的学生记录,则查找不成功,返回-1。,查找学生的方法:,8.1.3 实现算法,int search ( List ,8.1.4 基本概念,查找表:利用计算机查找时,首先要确定原始数据的逻辑结构和存储结构,变为计算机中处理的数据结构,这种数据结构称为存储表。 查找:在一个含有众多数据元素(或记录)的查找表中找出某个“特定的”数据元素(或记录)。查找成功,返回该记录的存储位置;查找失败,返回一个特定值。 平均查找长度:在查找成功情况下的平均比较次数。对于含有n个记录的表,查找成功时的平均查找长度为: ASL= 其中: Ci为查找第i个元素时同给 定值K进行比较的次数; Pi为查找第i个记录的概率,
4、且 在等概率情况下,则P1= P2= Pn=,8.2 静态查找,8.2.1 顺序查找 8.2.2 折半查找 8.2.3 分块查找,8.2 静态查找,查找过程中,进行如下操作:查询某个特定的数据元素是否在查找表中或检索某个数据元素的各种属性。此查找表称为静态查找表(Static Search Table)。 查找表定义为顺序存储的线性表,数据类型定义如下: struct Elemtype /数据元素类型定义 keytype key; /关键字项 ; #define maxlen maxsize /分配的存储单元个数 struct ListSq Elemtype e maxsize; int le
5、n; ;,8.2.1 顺序查找,顺序查找(线性查找)基本思想: 从线性表的一端开始,依次将每个元素的关键字同给定值K进行比较,若某元素关键字与K相等,则查找成功;若所有元素都比较完毕,仍找不到关键字为K的元素,则查找失败。 实现算法: (略) ASL:等概率前提下,ASL= = (n+1)/2;若查找失败,需要比较n+1次,所以时间复杂为O(n)。,8.2.2 折半查找,使用折半查找(二分查找)的前提:有序表形式表示。 折半查找的思想:设存在顺序有序表ListSq L,表中元素的下界为0,上界为L.len-1。先取整个有序表的中间点元素L.emid(mid=((上界+下界)/2)的关键字同给定
6、值K进行比较。若相等,则查找成功,返回该元素的下标mid;若KL.emid.key,则说明待查元素若存在只能在右子表(下标从mid+1到n1的范围)中,只要在右子表中继续二分查找即可。重复执行,直到找到关键字为K的元素或当前查找区间为空(即表明查找失败)为止。,实现算法: (略) 二叉判定树:表示折半查找的查找过程。树中的每个结点表示表中一个元素,每棵子树的根结点表示当前查找区间的中间点元素,它的左子树和右子树分别对应该区间的左子表和右子表。 二叉判定树是一棵二叉排序树。 二分查找的平均查找长度为:,8.2.3 分块查找,分块查找(索引顺序查找) 基本思想: 首先把一个线性表(即主表)按照一定
7、的函数关系或条件划分成若干个逻辑子表,为每个子表分别建立一个索引项,由所有子表的索引项构成一个索引表。当进行分块查找时,先根据所给的关键字查找索引表,从中查找出给定值K刚好小于等于索引值的那个索引项,找到待查块,然后再到主表中查找该块,从中查找待查的记录。 实现算法: (略) 索引表是有序的,所以在索引表上既可以采用顺序查找,也可以采用折半查找,而每个块中的记录排列是任意的,所以在块内只能采用顺序查找。,平均查找长度为: 设将长度为n的表均匀分成b块,每块有s个记录,则b=n/s,查找表中每条记录的概率相等,则每块查找的概率为1/b,块中每条记录的查找概率为1/s。则顺序查找索引表时:,8.3
8、 动态查找,8.3.1 二叉排序树查找 8.3.2 二叉平衡树 动态查找表特点:表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在关键字等于key的记录,则查找成功;否则插入关键字为key的元素。,8.3.1 二叉排序树查找,二叉排序树(二叉搜索树、二叉查找树) : 或者是一棵空树,或是一棵有如下特性的非空二叉树: l 若它的左子树非空,则左子树上所有结点的关键字均小于根结点的关键字。 l若它的右子树非空,则右子树上所有结点的关键字均大于等于根结点的关键字。 l 左、右子树本身又各是一棵二叉搜索树。 结论:二叉排序树中序遍历得到的必是一个有序序列。,二叉排序树的查找过程(递归查
9、找过程): 查找一个给定值为k的结点,若二叉树不为空,首先将它与根结点进行比较,若K与根结点相等,查找成功;若K小于根结点,则表示若K存在,应在其左子树中;否则若K存在,应在其右子树中。对左、右子树同样按上述过程先与子树的根结点进行比较,根据比较的结果定下一步的操作。若在查找过程中遇到叶子结点,还没有找到待找结点,则表示二叉排序树中不存在该结点,查找不成功。 实现算法: (略),时间复杂度: 分析:在二叉排序树上进行查找的过程中,根结点为待查结点时,给定值同树中结点的比较次数仅为一次,待查结点位于最后一层时,比较的次数为树的深度。 普通情况下,对二叉排序树进行查找的时间复杂度为O( ); 最差
10、情况下(二叉排序树为一棵单支树),其时间复杂度为O(n)。,8.3.2 二叉平衡树,二叉平衡树(AVL树): 或者是一棵空树,或者是一棵具有如下性质的非空二叉树: 它的左子树和右子树都是二叉平衡树,且左子树和右子树的深度之差的绝对值不大于1。二叉平衡树中结点的左子树的深度减去它的右子树的深度的值定义为平衡因子BF,则BF的值只可能为1、0和1。,对二叉排序树插入结点而构造平衡二叉树的规律: 设最小子树根结点的指针为a,则失去平衡后进行调整的规律: LL型:单向右旋平衡处理 RR型:单向左旋平衡处理 LR型:双向旋转(先左后右)平衡处理 RL型:双向旋转(先右后左)平衡处理 时间复杂度: 在查找
11、过程中和给定值进行比较的关键字的个数不超过树的深度,所以,在二叉平衡树上进行查找的时间复杂度为O(log2n)。,8.4 散列查找,8.4.1 散列存储和散列函数的构造方法 8.4.2 解决冲突的方法 8.4.3 散列查找实现算法和性能分析,8.4.1 散列存储和散列函数构造,基本术语: 散列存储:以数据中每个元素的关键字K为自变量,通过一个函数f(k)计算出函数值,把这个值同存储空间中一个唯一的存储位置相对应,将该元素存储到这个存储位置中。函数f(k)称为散列函数或哈希函数。f(k)的值称为散列地址或哈希地址;进行散列存储的地址空间称为散列表或哈希表。 冲突:实际应用中,由于散列函数的构造方
12、法不同,常会出现多个元素同时占用一个存储单元的情况,即散列地址相同,这种现象叫冲突。具有相同函数值的不同关键字的元素,称为同义词。,常用的构造散列函数的方法:,直接定址法 数字分析法 平方取中法 折叠法 除留余数法,8.4.2 解决冲突的方法,常用的解决冲突的方法有以下几种:,开放定地址 链地址法,从发生冲突的那个单元开始,按照一定次序,从散列表中查找出一个空闲存储单元,把发生冲突的待插入元素存入到该单元中的一类解决冲突的方法。设H(key)为散列函数,m为散列表长度。则开放定址法中找下一个空闲空间的散列函数为:Hi=(H(key)+ di)%m 其中,i=1,2k; di称为增量,以di的取
13、值分为以下三种: (1)di=1,2,3m-1,称线性探测再散列。 (2)di=12,-12,22,-22,k2,(km/2)称二次探测再散列。 (3)di=随机数序列,称为随机探测再散列。,开放定址法:,把具有相同散列地址的关键字放在同一链表中,称为同义词链表。通常把具有相同散列地址的关键字都存放在一个同义词链表中,有m个散列地址就有m个链表,同时用数组tm存放各个链表的头指针,凡是散列地址为i的记录都以结点方式插入到以ti为头指针的单链表中。,链地址法:,8.4.3 散列查找实现算法和性能分析,实现算法: (略) 结论: l由于产生“冲突” ,查找过程仍是一个给定值和关键字进行比较的过程。
14、因此,仍需以平均查找长度作为衡量散列表的查找效率的量度。 l 查找过程中比较个数取决于因素:散列函数、解决冲突的方法和散列表的装填因子。 装填因子定义: = 越小,发生冲突的可能性就越小;越大,发生冲突的可能性就越大。,本章总结,本章主要介绍了数据处理中的几种典型的查找方法、及实现算法和各种查找方法的性能分析。 查找:指在一个含有众多数据元素(或记录)的查找表中找出某个“特定的”数据元素(或记录)。 查找过程:是数据处理的一个环节,它的下一环节是对查找到的结果进行处理,根据所做的操作的不同,将查找方法分为静态查找和动态查找。静态查找方法介绍了顺序查找、二分查找和分块查找三种方法。动态查找方法介
15、绍了二叉排序树查找和二叉平衡树查找。,顺序查找既适用于顺序表,也适用与单链表,时间复杂度是O(n),平均查找长度为(n+1)/2 。 折半查找只适用于顺序存储的有序表。折半查找的时间复杂度为O(log2n)。折半查找的查找过程可以画成一棵二叉判定树,它是一棵二叉排序树。 分块查找过程分为两部分:先在索引表中查找;然后在主表的对应块中顺序查找。 二叉排序树查找:根据二叉排序树的定义,首先访问根结点,若其值等于给定值则查找成功;若给定值比根结点大,继续向右子树中查找;否则给定值比根结点小,继续在左子树中查找,直到找到该结点或找不到为止,此时查找失败。,二叉平衡树的BF的值只可能为1、0和1。二叉平衡树的构造过程中进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届宁夏石嘴山市第十五中学九上化学期中复习检测模拟试题含解析
- 2027届广东省汕头潮南区四校联考九年级化学第一学期期末质量跟踪监视模拟试题含解析
- 天津市西青区名校2027届九年级化学第一学期期中考试试题含解析
- 2027届云南省曲靖市沾益区播乐乡罗木中学化学九上期中复习检测模拟试题含解析
- 2027届辽宁省丹东市第十八中学化学九年级第一学期期末经典试题含解析
- 黑龙江省鹤岗市绥滨五中学2027届九年级化学第一学期期末联考试题含解析
- 2026中国食品饮料制造行业市场现状供需分析及投资评估规划分析研究报告
- 2027届广西柳州市柳北区九级九上化学期中监测模拟试题含解析
- 2026全球智能手机市场深度剖析及产业链发展趋势与投资布局研究报告
- 河北省保定市回民中学2027届九上物理期末检测试题含解析
- 2026年心理健康全科专任小学教师招聘考试笔试试题(含答案)
- 2026秋统编版小学语文六年级上册第七单元《20 文言文二则》曹冲称象教学设计
- 2026年新疆第三师图木舒克市高校毕业生“三支一扶”计划招募(347人)笔试参考试题及答案详解
- 2026年三支一扶考试综合基础知识考试卷及答案(六)
- 2026年秋新教材外研版九年级上册英语Unit 1-8课文+翻译
- 2026-2030中国减肥市场发展动向分析与未来营销创新策略研究报告
- 高标准农田建设项目监理服务方案投标文件(技术方案)
- 新生儿灌肠操作规范
- 2026年防疫员技师实操题库及评分细则
- 医院供氧中心工作制度
- 【低空经济】低空政务航空平台设计方案
评论
0/150
提交评论