Hash理解

什么是Hash算法?

hash算法是一种能根据投入值得到对应结果的算法,hash算法不可逆,即无法通过结果得到投入值,不同的数据投入也可能得到同样的结果(冲突碰撞,我们要避免这种碰撞)。相同的数据会得到同样的答案

Hash算法类别

常见的Hash算法如下:

直接寻址法:Hash(key)=a*key+b(a和b均为常数)线性函数

数字分析法:通过分析数据取其中分布较为均匀的几位作为结果,例如12356和12398,其中前3位位重复如果将其作为结果,将导致储存不均匀,所以取后2位,56和98

除留余数法:除以一个不大于散列表长度的数p,Hash(key)=key%p,对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。

平方取中法:将值平方取其中间几位作为结果

折叠法:每数字分组,最终加和

随机数法:选择一随机函数,取keyword的随机值作为散列地址,通经常使用于keyword长度不同的场合。

设定哈希函数为:H(key) = Random(key)其中,Random 为伪随机函数

此法适于对长度不等的关键字构造哈希函数。

解决冲突算法

开放定址法:将冲突的Hash值作为自变量,通过某种冲突解决算法得到新的hash地址

                线性探测:顺序查看下一地址直到空闲地址(会产生堆积)

                平方探测法:d、d+1^2、d-1^2、d+2^2、d-2^2.。。。。依次查看直到找到空闲

                再散列法(双散列法):当产生冲突时,通过新的散列法得到地址增量

                伪随机法:当发生冲突时,通过伪随机数得到地址增量

拉链法:这种方法的思路是将产生冲突的元素建立一个单链表(Hash桶),并将头指针地址存储至Hash表对应桶的位置。这样定位到Hash表桶的位置后可通过遍历单链表的形式来查找元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值