【哈希】Hash函数算法和Hash碰撞


前言

本文章为学习笔记,总结下常用的算法

一、哈希算法的扫盲参考

参考:
哈希算法(哈希函数)基本
哈希(HASH)算法总结
Hash算法总结
哈希函数
数据结构—— 构造散列函数的六种方法
哈希表、哈希桶的实现
解决哈希冲突的三种方法(拉链法、开放地址法、再哈希法)

二、Hash函数算法

1.除留余数法

将key通过hash函数生成hashcode,然后与hash桶的数量进行取余,结果用于确定将该值存放在哪个桶中。
假设:hash(key) = key + 1 ,hash桶数量为4

(key, value)hashcode取余后
( 1, 6)22
( 3, 8)40
( 8,10)91
(16, 1)171

拉链法处理hash碰撞

优点:使用场景广泛,不受限制。
缺点:存在哈希冲突,需要解决哈希冲突,哈希冲突越多,效率下降越厉害

2.平方取中法

取key平方后的中间几位作为散列地址

keykey2取中间3位
21144,521452
985970,225702
468219,024190

在这里插入图片描述

使用场景:不知道关键字的分布,而位数又不是很大

3.随机数法

选择一随机函数,取key的随机值作为散列地址
使用场景:关键字长度不等时



三、Hash碰撞

1.拉链法(开散列)

发生哈希冲突的位置,生成一个链表,用来存储hash冲突的元素
拉链法处理hash碰撞

2.开放地址法(闭散列)

发生哈希冲突位置开始,依次向后探测,指导找到下一个空位置为止。

3.再哈希法

发生哈希冲突时,再次哈希得出散列地址,直至不发生冲突位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

葫芦娃子救我

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

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

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

打赏作者

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

抵扣说明:

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

余额充值