数据构造第09章 查找.ppt

数据构造第09章 查找

第9章 查找 基本概念 问题: (4)如何评估查找方法的优劣? §9.1 静态查找表 9.1.1 顺序表的查找 查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较 分析顺序查找的时间性能 9.1.2 有序表的查找 折半查找的查找过程 折半查找举例 折半查找过程的算法描述 分析折半查找的时间性能 9.1.4 索引顺序表的查找 分块查找的过程 若对索引表和子表都用顺序搜索,则索引顺序搜索的搜索成功时的平均搜索长度为 ASLbs = Lb + Lw =(b+1)/2+(s+1)/2 =(b+s)/2 +1 =(n/s + s)/2+1 §9.2 动态查找表 9.2.1 二叉排序树和平衡二叉树 二叉排序树的查找算法: 二叉排序树的插入算法 二叉排序树的删除算法 (1)被删除的结点是叶子结点 (2)被删除的结点只有左子树或者只有右子树 (3)被删除的结点既有左子树,也有右子树 二叉排序树的查找分析 9.3 哈希表 基本思想:在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法 定义 哈希函数——在记录的关键字与记录的存储地址之间建立的一种对应关系叫~ 哈希函数是一种映象,是从关键字空间到存储地址空间的一种映象 哈希函数可写成:addr(ai)=H(ki) ai是表中的一个元素 addr(ai)是ai的存储地址 ki是ai的关键字 哈希表—应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,这样构成的表叫~ 哈希查找—又叫散列查找,利用哈希函数进行查找的过程叫~ 从例子可见: 哈希函数只是一种映象,所以哈希函数的设定很灵活,只要使任何关键字的哈希函数值都落在表长允许的范围之内即可 冲突:key1?key2,但H(key1)=H(key2)的现象叫~ 同义词:具有相同函数值的两个关键字,叫该哈希函数的~ 哈希函数通常是一种压缩映象,所以冲突不可避免,只能尽量减少;同时,冲突发生后,应该有处理冲突的方法 哈希函数的构造方法 直接定址法 构造:取关键字或关键字的某个线性函数作哈希地址,即H(key)=key 或 H(key)=a·key+b 特点 直接定址法所得地址集合与关键字集合大小相等,不会发生冲突 实际中能用这种哈希函数的情况很少 数字分析法 构造:对关键字进行分析,取关键字的若干位或其组合作哈希地址 适于关键字位数比哈希地址位数大,且可能出现的关键字事先知道的情况 平方取中法 构造:取关键字平方后中间几位作哈希地址 适于不知道全部关键字情况 折叠法 构造:将关键字分割成位数相同的几部分,然后取这几部分的叠加和(舍去进位)做哈希地址 种类 移位叠加:将分割后的几部分低位对齐相加 间界叠加:从一端沿分割界来回折送,然后对齐相加 适于关键字位数很多,且每一位上数字分布大致均匀情况 除留余数法 构造:取关键字被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=key MOD p,p?m 特点 简单、常用,可与上述几种方法结合使用 p的选取很重要;p选的不好,容易产生同义词, 选p为小于或等于哈希表表长m的某个最大质数为好 随机数法 构造:取关键字的随机函数值作哈希地址,即H(key)=random(key) 适于关键字长度不等的情况 选取哈希函数,考虑以下因素: 计算哈希函数所需时间 关键字长度 哈希表长度(哈希地址范围) 关键字分布情况 记录的查找频率 处理冲突的方法 假设哈希表的地址集为0~(n-1),冲突是指由关键字得到的哈希地址为j(0≤j≤n-1)的位置上已存有记录,则“处理冲突”就是为该关键字的记录找到另一个“空”的哈希地址。 在处理冲突的过程中可能得到一个地址序列Hi i=1,2,…k (Hi[0,n-1]).即在处理哈希地址的冲突时,若得到的另一个哈希地址H1仍然发生冲突,则再求下一个地址H2,若H2仍然冲突,再求得H3……依次类推,直到Hk不发生冲突为止,则Hk为记录在表中的地址。 三、冲突处理方法 处理冲突的方法 1、开放定址法 方法:当冲突发生时,形成一个探查序列;沿此序列逐个地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放到该地址中,即Hi=(H(key)+di)MOD m,i=1,2,……k(k?m-1) 其中:H(key)——哈希函数 m——哈希表表长 di——增量序列 分类 线性探测再散列:di=1,2,3,……m-1 二次探测再散列:di=12,-12,22,-22,32,……±k2(k?m/2) 伪随机探测再散列:di=伪随机数序列 例: 讨论: (

文档评论(0)

1亿VIP精品文档

相关文档