Open Hashing 和 Closed Hashing
数据结构演示地址:
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
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Open Hashing 和 Closed Hashing