散列表(Hash Table)中的散列函数和散列冲突解决

散列表(Hash Table)是一种数据结构,利用散列函数将键映射到数组下标。虽然理想的散列函数可以避免冲突,但实际中常采用开放寻址法(线性探测、二次探测、双重探测)和链表法解决冲突。装载因子是衡量散列表性能的重要指标,影响冲突和操作效率。
摘要由CSDN通过智能技术生成

散列表的英文叫“Hash Table”,平时也叫它“哈希表”或“Hash表”。散列表是用数组支持按照下标随机访问数据的特性。

将键(key)转化为数组下标的映射方法就叫作散列函数,而散列函数计算得到的值就叫作散列值。

散列函数

定义为hash(key),其中key表示元素的键值,hash(key)的值表示经过散列函数计算得到的散列值。

散列函数设计的基本要求:

    1 散列函数计算得到的散列值是一个非负整数。

    2 如果key1 = key2,那hash( key1 ) == hash( key2 )。

    3 如果key1 ≠ key2,那hash( key1 ) ≠ hash( key2 )。

散列冲突

在真实情况下要想找到一个不同的key对应的散列值都不一样的散列函数,几乎是不可能的,无法完全避免散列冲突,常用的散列冲突的解决方法有两类,开放寻址法(open addressing)和链表法(chaining)。

1 开放寻址法

核心思想:如果出现了散列冲突,就重新探测一个空闲位置,将其插入。

探测方法:线性探测(Linear probing)、二次探测(Quadratic probing)、双重探测(Double hashing)

    1)线性探测:往散列表中插入数据时,如果某个数据经过散列函数散列之后,存储位置已经被占用了,我们就从当前位置开始,依次往后查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值