【数据结构】哈希表/散列表

本文详细介绍了哈希表的基本概念,包括直接定址法、除留余数法等构造哈希表的方法。深入探讨了哈希冲突的原因、载荷因子的影响,并展示了开放定址法(线性探测、二次探测)和开链法(哈希桶)处理冲突的策略。此外,还提供了线性探测和哈希桶的代码实现,以减少哈希冲突并优化性能。
摘要由CSDN通过智能技术生成

本篇博文,旨在介绍哈希表的基本概念及其用法;介绍了减少哈希冲突的方法;并用代码实现了哈希表的线性探测和哈希桶


哈希表的基本概念

哈希表是一种存储结构,它通过key值可以直接访问该key值在内存中从存储位置;

将关键值映射到表中的位置访问数据,这个映射函数叫做散列函数,存储数据的表叫做散列表;

构造哈希表的几种方法

1、直接定址法

根据关键值直接确定元素存取的位置,该散列函数是一个线性函数;例如 Hash(key) = A*key+B,其中,A和B都为常数

2、除留余数法

取出关键值后,将关键值除以该散列表的长度从而获得的余数,作为散列地址;Hash(key) = key%m

3、平方取中法

取关键字平方后的中间几位为哈希地址。由于一个数的平方的中间几位与这个数的每一位都有关,因而,平方取中法产生冲突的机会相对较小。

平方取中法中所取的位数由表长决定。

例: K = 456 , K2 = 207936 若哈希表的长度m=102,则可取79(中间两位)作为哈希函数值。

4、折叠法

将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址。数位叠加可以有移位叠加和间界叠加两种方法。 

5、随机数法

选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。

6、数学分析法

找出数字的规律,尽可能利用这些数据来构造冲突几率较低的散列地址。

哈希冲突/哈希碰撞

哈希冲突出现的原因

关键值通过任何的散列函数获得的散列地址都有可能是重复的,这种情况叫做哈希冲突;

载荷因子

散列表的载荷因子的定义为:a = 表中的元素个数/散列表的长度

对于开放定址法,载荷因子特别重要,一般情况下严格控制在0.7-0.8

超过0.8,哈希表的效率会很低

过低的话,浪费的空间会更大


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值