07查找03-数据结构课程教学网站.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7 查找(3) ;1、掌握查找的概念,熟练掌握顺序表和有序表(折半查找)的查找算法及其性能分析方法; 2、掌握二叉排序树的概念,熟练掌握二叉排序树的构造和查找算法及其性能分析方法; 3、掌握二叉排序树的插入算法,二叉排序树的删除方法; 4、掌握平衡二叉树的概念,掌握平衡化二叉树的方法; 5、掌握哈希查找的概念,掌握哈希函数(除留余数法)的构造。 6、掌握用线性探测法和链地址法解决冲突的方法,并能进行查找长度的计算。 7、熟悉标准模版库STL中的相关知识。 ;7 查找 ;回顾和复习;哈希表是什么? 哈希函数的构造方法 处理冲突的方法 哈希表的查找;一、哈希表是什么?;若干问题; 对于频繁使用的查找表,希望 ASL = 0。 只有一个办法:预先知道所查关键字在表中的位置,要求:记录在表中位置和其关键字之间存在一种确定的关系。;但是,对于动态查找表而言,;{Zhao, Qian, Sun, Li, Wu, Chen, Han, Ye, Dai} ;1) 哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上, 它的设置很灵活,只要这个地址集合的大小不超出允许范围即可;;哈希表的定义:;二、构造哈希函数的方法; 数字分析法 设有 n 个 d 位数,每一位可能有 r 种不同的符号。这 r 种不同的符号在各位上出现的频率不一定相同,可能在某些位上分布均匀些;在某些位上分布不均匀,只有某几种符号经常出现。可根据哈希表的大小,选取其中各种符号分布均匀的若干位作为哈希地址。; 数字分析法仅适用于事先明确知道表中所有关键字每一位数值的分布情况,它完全依赖于关键字集合。如果换一个关键字集合,选择哪几位要重新决定。;平方取中法 通常,要预先估计关键字的数字分布并不容易,要找数字均匀分布的位数则更难。 如 ( 0100,0110,1010,1001,0111 ) 如果关键字的所有各位分布都不均匀,则可取关键字的平方值的中间若干位作为哈希表的地址。 由于一个数的平方值的中间几位数受该数所有位影响,将使随机分布的关键字得到的哈希函数值也随机。;;折叠法 若关键字的位数很多,且每一位上数字分布大致均匀,则可采用折叠法。 方法把关键字自左到右分成位数相等的几部分,每一部分的位数应与哈希表地址位数相同,只有最后一部分的位数可以短一些。 把这些部分的数据叠加起来,就可以得到具有该关键字的记录的哈希地址。 有两种叠加方法: 移位法 — 把各部分的最后一位对齐相加; 间界法 — 各部分不折断,沿各部分的分界来回折叠,然后对齐相加,将相加的结果当做哈希地址。;; 除留余数法 设哈希表中允许的地址数为 m, 取一个不大于 m,但最接近于或等于 m 的质数 p作为除数,利用以下公式把关键字转换成哈希地址。哈希函数为: hash ( key ) = key % p p ? m 其中, “%”是整数除法取余的运算,要求这时的质数 p 不是接近2的幂。; 例:有一个关键字 key = 962148,哈希表大小 m = 25,即 HT[25]。取质数 p= 23。哈希函数 hash ( key ) = key % p。则哈希地址为 ;三、处理冲突的方法 ;为产生冲突的地址 H(key) 求得一个地址序列: H0, H1, H2, …, Hs 1≤ s≤m-1 其中:H0 = H(key) Hi = ( H(key) + di ) MOD m i=1, 2, …, s;对增量 di 有三种取法:;例如: 关键字集合 { 19, 01, 23, 14, 55, 68, 11, 82, 36 };将所有哈希地址相同的记录都链接在同一链表中。 ;查找过程和造表过程一致。假设采用开放定址处理冲突,则查找过程为: ;给定k值;const int MaxSize = 11371; // 某个大于10000的素数 struct ElemType { // 元素结构 int key; // 关键字 char *info; // 其他信息 }; struct HashTable{ ElemType *elem; int count; // 当前数据元素个数,一般不用 }; enum Status{SUCCESS ,UNSUCCESS ,DUPLICATE};;Status SearchHash (HashTable ht, KeyType k, int p) {   // 在开放定址哈希表H中查找关键字为k的元素,若查

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档