哈希表的表示

本文详细介绍了哈希表的基本概念,包括哈希函数、冲突和同义词的定义。哈希函数的构造方法包括直接定址法、除留余数法、平方取中法、数字分析法和折叠法。同时,文章讨论了处理冲突的常见方法,如开放定址法、再哈希法和链地址法,深入解析了各种方法的原理和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几个概念

  • 哈希函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为H(K)。
  • 冲突:对不同的关键字可能得到同一哈希地址的现象,即key1 != key2,而H(key1)=H(key2)。
  • 同义词:发生冲突的不同关键字。
  • 哈希表:根据关键字直接进行访问的数据结构,建立了关键字与存储地址之间的一种直接映射关系。

哈希函数的构造方法

(1)直接定址法
取关键字或关键字的线性函数值为哈希地址,即H(key)=key或H(key)=a*key+b。
这种方法对于不同的关键字不会发生冲突,但关键字分布不连续,空位多,会造成存储空间的浪费。
(2)除留余数法
取关键字被某个不大于哈希表表长length的数p除后所得的余数为哈希地址,即H(key)=key % p,p<=length。
p一般取一个不大于length但最接近或等于length的质数。
(3)平方取中法
取关键字平方后的中间几位为哈希地址。
(4)数字分析法
设关键字是r进制数,并且哈希表中可能出现的关键字都是事先知道的,则可取关键字的若干位组成哈希地址。
(5)折叠法
将关键字分割成位数相同的几部分,然后取这几部分的叠加和(舍去进位)作为哈希地址。
当关键字位数很多,而且关键字中每一位上数字分布大致均匀是适用。

处理冲突的方法

  • 开放定址法
    Hi = (H(key) + di) % length,i = 1,2,3,…,length。
    其中:H(key)为哈希函数;length为哈希表表长;di为增量序列。
    对于di有几种不同的取法:
    (1)di = 1,2,3,…,length-1,称为线性探测再散列
    (2)di = 12,-12,22,-22,32,…,±k2(k<=length/2),称为二次探测再散列
    (3)di = 伪随机数序列,称为伪随机探测再散列
    在这里插入图片描述

  • 再哈希法
    Hi = RHi(key),i = 1,2,3,…,length。
    RHi均为不同的哈希函数,即在同义词产生冲突时计算另一个哈希函数地址,直到冲突不在发生。

  • 链地址法
    将所有关键字为同义词的记录存储在同一线性表中。
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1 + 1=王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值