什么是哈希,哈希表,哈希函数,哈希碰撞?

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 什么是哈希,哈希表,哈希函数,哈希碰撞?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

什么是哈希?

比方我有个原始值,S=[“老铁双击666”,‘感谢老铁送的飞机’],
通过某种算法(比如java的hasecode(获得变量的物理地址))得到的666这个就是“哈希码“(将字符串转换成尽可能不重复的int类型数字),
然后通过“哈希算法“(如取余法等)获得的值比如1, 这个1就是“哈希值“,存储“1对应老铁双击666“这些关系的就是哈希表。

说明一下:上面的取余运算是666%N,N在下图的意思中是3,正常是count(S)/5,太长会产生很多空项,太短很多值会很长变成链式搜索

什么是哈希冲突?

1.拉链法:

在这里插入图片描述
上图为什么1位置后面有两个数据呢?因为其他值经过哈希运算后拿到的哈希值也可能是1,这就是哈希冲突(哈希碰撞),解决方法有很多,链地址法适用于经常进行插入和删除的情况。

2.开放地址法:

开放地址法又分线性探测法和双重哈西法

线性探测法
(图为线性探测法)

线性探测法

假设元素29哈希运算后还是29
插入元素29:元素29的哈希值为29,29%14=1,但1号元素已经有数值15了,然后检查下一个元素(2号元素),但2号元素已经有数值30了,然后检查下一个元素(3号元素),3号元素为空,插入到3号元素
搜索元素29:元素29的哈希值为29,29%14=1,检查1号元素,15!=29;然后检查下一个元素(2号元素),30!=29;然后检查下一个元素(3号元素),29=29,返回数值,查找完毕。

双重哈西法

又称再哈西法,再原来哈西函数的基础上再准备一个哈西函数2,如地址冲突,运行函数2,如又冲突,则函数2得到的值加一,再加二直到不在冲突。

总结

hash table哈希表是基于数组的一种存储方式,其存储上就是用于存储键值对(<key,value>)的集合(数组)。当要存储一个数据的时候,首先用一个函数计算 数据的地址,然后再将数据存进指定地址位置的数组里面。这个函数就是哈希函数,而这个数组就是哈希表,哈希的主要应用是哈希表和分布式缓存

注:自己的理解归纳,有错误敬请留言指正。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134023.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!