哈希值定义,哈希值是怎么生成的

我是搬运工
原文链接:https://www.zhihu.com/question/21801702
作者:doge
链接:https://www.zhihu.com/question/21801702/answer/679363833
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

hash值是通过一个计算函数把难以比较的字符串或者其他类型的数据映射成一个整数,最常用的就是映射a~z的hash值,变成hash[(str(i)-‘a’]这个数是一个十进制数,这个十进制数把它映射到0-25,也就是数组下标,但通常来说是映射成1-26,因为方便计算,这是最简单的hash值,然后这个hash值映射成下标,这在算法题里面经常会出现,或者说可以将一个数据看成一个P进制数,
还是说上一个例子,如果是字符串对比的话,我们可以把这26个字母看成一个26进制的数,一般的话任意子串的hash我们一般使用前缀和的方式,这里暂时不展开了。那么这个数怎么映射呢?就是把字符串出现的字母都取一遍然后去当成一个26进制算,这样得到的hash值发生冲突的概率就比较低,因为转换为的数一定是一个唯一值,比如要计算abc的值,那就是(123)26=1*262+2*261+3这个计算出来的数就是hash值
现在下结论:hash值是通过一个f(hash)计算出一个整数,然后当查找一个数据或者字符串的时候就将计算出来的整数进行对比,只用看整数相不相等就可以,而不用去暴力O(n)(如果是要对比n个数那就是O(n^2)了,所以,hash值就是为查找算法,提供一个优秀的O(1)复杂度的解决方案(hash的开销主要是对函数进行计算)另外hash值在加密问题里也很重要,通过一种不可知的hash算法将hash值计算出来然后校验也是一种应用方式同时,hash在缓存机制的处理上也很优秀
hash把任意长度的输入(又叫做预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值