Open Hashing 和 Closed Hashing

  • 时间:2021-03-20 20:59 作者:我犟不过你 来源: 阅读:613
  • 扫一扫,手机访问
摘要:数据结构演示地址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html冲突处理技术可以分为两类:Open Hashing开散列方法, 又叫拉链法Closed Hashing闭散列方法, 又叫开地址法 (Open Addressi

数据结构演示地址:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

冲突处理技术可以分为两类:
Open Hashing开散列方法, 又叫拉链法
Closed Hashing闭散列方法, 又叫开地址法 (Open Addressing)

这两种方法的不同之处在于:开散列法把发生冲突的关键码存储在散列表主表之外,而闭散列法把发生冲突的关键码存储在表中另一个槽内

Open Hashing

开散列方法的一种简单形式是把散列表中的每个槽定义为一个链表的表头。散列到一个特定槽的所有记录都放到这个槽的链表中。

举个例子:
有一个长度为13的哈希表

image.png

通过key%哈希表长度取余,找到放置key的位置。例如放置30,则30%13 = 4。

image.png

增加相同hash值的key时,放入一个82,结果如下图

image.png

发现存在相同key的hash值时,在数组的该槽位上生成了一个单向链表,用于解除哈希冲突问题。

Closed Hashing

闭散列方法, 又叫开地址法,当发生哈希冲突时,假如该哈希表还没有被填满,那么就把该元素放到哈希表的下一个空闲的位置。

举个例子:
长度为29的哈希表

image.png

通过key%哈希表长度取余,找到放置key的位置。例如放置30,则30%29 = 1。

image.png

再次放置一个余1的key,放置59,59%29 = 1。

image.png

发现相同哈希值的key被放在了下一个空闲的位置。

Closed Hashing,Using Buckets
该方法是在开地址的方法上,做了解决,相当于变相添加了容量。
如下图,分割了11个桶,每个桶内部又分出三个位置,用于存储相同的key的hash值,当三个存满后会将溢出值放入最后的overflow溢出区。

image.png

连续存入4个100,100%11 = 1,存入三个100在1区,最后一个放在溢出区。

image.png
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部