数据结构-查找-哈希表

哈希表

定义

根据设定的哈希函数 H ( k e y ) H(key) H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便被称为哈希表。

上述映像过程称为哈希造表或散列,所得存储位置称为哈希地址或散列地址。

构造哈希函数的方法:

(一个“好”的哈希函数可以减少冲突,但是冲突是不可以避免的)

(1)直接定址法:取关键字或关键字的某个线性函数值为哈希地址。

(2)数字分析法:可以取关键字的若干数位组成哈希地址。

(3)平方取中法:取关键字平方后的中间几位为哈希地址。

(4)折叠法:将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去最高位的进位)做为哈希函数。

(5)除留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址。这是一种简单,也是最常用的构造哈希函数的方法。

(6)随机数法:选择一个随机函数,取关键字的随机函数值为它的哈希地址。

处理冲突的方法:

(1)开放定址法:

H i = ( H ( k e y ) + d i )   M O D   m     i = 1 , 2 , . . . , k ( k < = m − 1 ) H_i = (H(key) + d_i) \space MOD \space m \space \space\space i=1,2,...,k (k <=m-1) Hi=(H(key)+di) MOD m   i=1,2,...,k(k<=m1)

其中: H ( k e y ) H(key) H(key) 为 哈希函数; m 为 哈希表表长; d i d_i di为增量序列可以有下列3种取法:

( 1 ) d i = 1 , 2 , 3 , . . . , m − 1 , 称 为 线 性 探 测 再 散 列 ( 2 ) d i = 1 2 , − 1 2 , 2 2 , − 2 2 , . . . , k 2 , − k 2 , ( k < = m / 2 ) , 称 为 二 次 探 测 再 散 列 、 ( 3 ) d i = 伪 随 机 数 列 , 称 为 : 伪 随 机 探 测 再 散 列 。 (1) d_i = 1,2,3,...,m-1,称为线性探测再散列 (2) d_i = 1^2,-1^2,2^2,-2^2,...,k^2,-k^2,(k<=m/2),称为二次探测再散列、(3)d_i=伪随机数列,称为:伪随机探测再散列。 (1)di=1,2,3,...,m1,线2di=12,12,22,22,...,k2,k2,(k<=m/2),3di=:

从上述线性探测再散列的过程中可以看到一个现象:当表中i,i+1,i+2位置上已填有记录时,下一个哈希地址为i、i+1,i+2和i+3的记录都将填入i+3的位置,这种在处理冲突过程中发生的两个第一个哈希地址不同的记录争夺同一个后继哈希地址的现象称做“二次聚集”,即在处理同义词的冲突过程中又添加了非同义词的冲突,显然,这种现象对查找不利。但另一方面,用线性探测再散列处理冲突可以保证做到:只要哈希表未填满,总能找到一个不发生冲突的地址.

(2)再哈希法:

H i = R H i ( k e y )     i = 1 , 2 , . . . , k H_i = RH_i(key) \space\space\space i=1,2,...,k Hi=RHi(key)   i=1,2,...,k

R H i RH_i RHi均是不同的哈希函数,即在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不在发生。

这种方法不易产生“聚集“,但是增加了计算的时间。

(3)链地址法:将所有关键字为同义词的记录存储在同一线性链表中。

链地址法的基本思想是,为每个 Hash 值建立一个单链表,当发生冲突时,将记录插入到链表中。

在这里插入图片描述

(4)建立一个公共溢出区:所有关键字和基本表中关键字为同义词的记录,不管它们由哈希函数得到的哈希地址是什么,一旦发生冲突,都填入溢出表。

例题:
在采用链地址法处理冲突所构成的散列表上查找某一关键字,则在查找成功的情况下,所探测的这些位置上的键值_____。
A.一定都是同义词
B.不一定都是同义词
C.都相同
D.一定都不是同义词

答案:A
解析:因为在链地址法中,映射到同一地址的关键字都会链到与此地址相对应的链表上,所以探测
过程一定是在此链表上进行的,从而这些位置上的关键字均为同义词

参考自
  • [数据结构(C语言版)].严蔚敏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值