第21讲哈希表.pptVIP

  • 29
  • 0
  • 约5.46千字
  • 约 33页
  • 2016-08-21 发布于重庆
  • 举报
第21讲哈希表

第21讲 哈希查找表 主讲人:陈红丽 哈希表(散列表 ) 查找算法的基础—比较、计算 能否通过对关键值的计算,直接得到待查记录的地址? 显然,记录的存放规则和查找规则必须一致。 存放/查找规则:从关键值映射存储位置,称为哈希表函数。 哈希地址:哈希函数值。 哈希表:按哈希表函数值存储数据的查找表。 妙:时间复杂度是O(1)。 哈希查找/存储的问题 难以保证映射关系的一一对应。 关键值的分布--广、散 (如:0,5,15...) 查找表的地址空间--小、密集(如:0,1,2...) 冲突现象:不同关键值的记录,却有相同的哈希地址。 同义词:造成冲突的关键值。 构造好的哈希函数 好的哈希函数(均匀的哈希函数):哈希地址均匀分布在整个地址空间,冲突次数少。 构造哈希函数的方法 折叠法示例 例 设给定的关键字为 : key = 23938587841,若存储空间限定 3 位, 则划分结果为每部分 3 位。上述关键码可划分为 4部分: 239 385 878 41 习题:有一关键字为key = 347256198,若表长为1000,请使用移位叠加法和间界叠加法计算哈希地址。 哈希函数的好坏,必须结合查找表的情况来分析 好哈希函数的特点: ①计算效率高; ②函数值不越界; ③函数值的分布均匀。 一般的哈希函数设计方法 多开辟空间,以减少冲突。 装填因子=表中记录数 / 表长度 一般而言,装填因子越大,冲突可能性大。 出现冲突时,沿一个地址序列逐个探测,直到找出一个空闲空间,将冲突记录存于此处。 H0 = H(key) Hi = ( H0 + di ) MOD m i=1, 2, …, m-1 其中,H (key)为哈希函数,m为哈希表长,di为增量序列。 开放定址法 优点:充分地利用了哈希表的空间 缺点:解决一个冲突,就为下一个冲突埋下了伏笔。 已知一组关键字: 19,14,23,1,67,20,84,27,55,11,10,79 利用除留余数法和线性探测再散列处理冲突方法,构造表长为16的哈希表 ,并写出其构造过程。 2. 再哈希法 方法:构造若干个哈希函数,当地址发生冲突时,就使用下一个哈希函数来计算哈希地址,直到冲突不再产生。即: Hi = RHi (key) i = 1,2,…, k 其中: RHi 是不同的哈希函数。 特点:计算时间增加。 3. 链地址法 方法:将所有关键字为同义词的记录存储在一个单链表中,并用一维数组存放头指针。 4. 建立一个公共溢出区 设哈希函数的值域 (哈希地址) 为 [0, m-1], 则分配两个表: 一个基本表 HashTable[0..m-1]:每个单元只能存放一个元素; 一个溢出表OverTable[0..v]:所有关键字和基本表中关键字为同义词的记录,不管它们的哈希地址是什么,一旦发生冲突,都填入溢出表。 在对哈希表进行查找时,对给定值 K,通过哈希函数计算出哈希地址 i,先与基本表的 HashTable[ i ] 单元比较,若相等,查找成功;否则,再到溢出表中进行查找。 Hash表的地址空间为0…5,散列函数为H(key)=key mod 6,采用线性探测法处理冲突,将10,5,9,3,11依次存入Hash表,那么查找元素3,需要比较 次。 A、1 B、2 C、3 D、4 * 第九章 查找 * 数据结构 一、基本概念 二、哈希函数的构造方法 三、处理冲突的方法 四、哈希表的查找 9.3 哈 希 表 假设有一批关键字序列18,75,60,43,54,90,46,给定哈希函数H(k)=k % 13,存贮区的内存地址从0到15,则可以得到每个关键字的散列地址为: H(18) = 18%13 = 5 H(75) = 75%13 = 10 H(60) = 60%13 = 8 H(43) = 43%13 = 4 H(54) = 54%13 = 2 H(90) = 90%13 = 12 H(46) = 46%13 = 7 于是,根据散列地址,可以将上述7个关键字序列存贮到一个一维数组HT(哈希表或散列表)中,具体表示为: HT 0 1 2 3 4 5 6 7 8 9 10 11 12 54 43 18 46 60 75 90

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档