数据结构PPT教学课件-第8章 查找.ppt

  1. 1、本文档共102页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 查找 8.2 静态查找表 8.3 动 态 查 找 表 8.4 哈希表及其查找 8.5 哈希表算法实现C语言源程序 在B+树上进行随机查找、 插入和删除的过程基本上与B-树类似。 只是在查找时, 若非终端结点上的关键字等于给定值, 并不终止, 而是继续向下直到叶子结点。因此, 在B+树, 不管查找成功与否, 每次查找都是走了一条从根结点到叶子结点的路径。 B+树查找的分析类似于B-树。 B+树的插入仅在叶子结点上进行, 当结点中的关键字个数大于m时要分裂成两个结点, 它们所含关键字的个数分别为 。并且它们的双亲结点中应同时包含这两个结点中的最大关键字。 B+树的删除也仅在叶子结点进行, 当叶子结点中的最大关键字被删除时, 其在非终端结点中的值可以作为一个“分界关键字”存在。 若因删除而使结点中的关键字的个数少于[m/2]时, 其和兄弟结点的合并过程亦和B-树类似。 8.4.1 哈希表与哈希函数 哈希查找因使用哈希(Hash)函数而得名, 哈希函数又叫散列函数, 它是一种能把关键字映射成记录存储地址的函数。 假定数组HT[0~m-1]为存储记录的地址空间, m为表长, 哈希函数H以记录的关键字k为自变量, 计算出对应的函数值H(k), 并以它作为关键字k所标识的记录在表HT中的(相对)地址或索引号, 这样产生的记录表HT叫做对应于哈希函数H的哈希表。 简言之, 在哈希表中, 关键字为k的记录, 存储在HT[H(k)]位置。习惯上, 把哈希函数值H(k)称为k的哈希地址或散列地址。 例如, 对一张BASIC语言语句符号表(语句定义符), 按哈希方法组织记录存储, 先要设定一个长度为m的哈希表HT, 然后构造哈希函数H, 按照关键字值k计算出各个记录的散列地址H(k), 并将这些记录存储到HT[H(k)]中去。 现设m=26, 且有LET、 PRINT、 INPUT、 FOR、NEXT、 GOTO等7个记录。 假设取关键字的首字母在英文字母中的序号作为其散列地址, 即   H(k)=ord(ch)-ord(′A′)+1 式中, ch是关键字值k的首字母, 则有根据计算得到的散列地址, 可将各个记录存储到哈希表中相应的位置。 以后, 若要访问某个记录, 只要重新计算H(k), 得到散列地址后, 便可直接到该位置去存取。 然而, 问题并非总是如此简单。  假定上面的记录中, 再增加GOSUB、 REM和IF, 结果我们发现: H(GOSUB)=7,H(REM)=18, H(IF)=9。 于是, REM记录被放到HT[18]中, 而GOSUB和IF不能存到哈希表中去。 因为, 那些位置上已有GOTO和INPUT, 如果再将GOSUB和IF存到哈希表中, 就会将原来存储的记录冲掉。 这种现象称为冲突或碰撞, 即不同的关键字值, 具有相同的哈希地址。  冲突不是我们所希望的, 而如何避免冲突发生, 则取决于哈希函数的构造。 好的哈希函数, 应使散列地址均匀地分布在哈希表的整个地址区间内, 这样可以避免或减少发生冲突。 然而, 这并非是件容易做到的事。 哈希函数的构造, 与关键字的长度、 哈希表的大小、关键字的实际取值状况等许多因素有关, 而且有的因素事前不能确定(如关键字的实际取值只知道范围)。 哈希函数的构造或多或少带有杂凑的意味, 英文单词hash一词就是杂凑的意思。  冲突的不可避免性, 有它一定的内因。 由于关键字的值域往往比哈希表的个数大得多,所以哈希函数是一种压缩映射, 碰撞是难免的。 例如, 存储100个学生记录, 尽管安排120个地址空间, 但由于学生名(假设不超过10个英文字母)的理论个数超过2610, 要找到一个哈希函数把100个任意的学生名映射成[0, 119]内的不同整数, 实际上是不可能的。冲突是很难避免的, 问题在于一旦发生了冲突应如何处理。冲突处理我们将在后面的  8.4.2 构造哈希函数的常用方法   构造哈希函数的方法很多, 这里只介绍一些常用的, 计算简便的方法。  1. 平方取中法 平方取中法即算出关键字值的平方, 再取其中若干位作为哈希函数值(散列地址)。  例如, 假定表中各关键字是由字母组成的, 用二位数字的整数01~26表示对应的26个英文字母在计算机中的内部编码, 则使用平方取中法计算KEYA, KEYB, AKEY, BKEY的散列地址可得关键字kk 的内部编码 k2 H(k) KEYA

文档评论(0)

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

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

1亿VIP精品文档

相关文档