【数据结构详解】哈希表Hash

什么是HashHash就像是一个桶排,那只不过是把各个元素的数值当做下标进行存储.其最常用的用途就是用来判重.但是,如何对字符串进行判重,不可能一个一个往前超,若n上万则显然不可行.我们可以选择进行Hash,将每一个字符串或者大数字进行一定的操作即可进行.对大整数类型进行Hash取模法对于每一个大整数进行取模,即除以一个大质数(例如107,10007,1000007,1-奇数个...
摘要由CSDN通过智能技术生成

什么是Hash

Hash就像是一个桶排,那只不过是把各个元素的数值当做下标进行存储.其最常用的用途就是用来判重.但是,如何对字符串进行判重,不可能一个一个往前超,若n上万则显然不可行.我们可以选择进行Hash,将每一个字符串或者大数字进行一定的操作即可进行.


对大整数类型进行Hash

取模法

对于每一个大整数进行取模,即除以一个大质数(例如107,10007,1000007,1-奇数个0-7),这样就作为数组的下标进行存储了.

为什么要对一个大整数取模

emmmmmm……经众多数学家证明重复的几率较小

万一实在有不可避免的误差/出题人卡你怎么办

有两种方法:
1.线性探测开拓地址法
2.拉链法


对字符串进行Hash

对字符串,我们可以选择按权展开法进行实现.
例如:对于字符abc,我们可以转换成26进制,即:1*26^0+2*26^1+3*26^2,很好理解吧
例如,对于字符串3gT,我们可以转换成某个质数进制即可.
但是,不要忘了,在按权展开的时候需要对一个大整数取模

如何避免字符串Hash的误差

同样:
1.线性探测开拓地址法
2.拉链法


线性探测开拓地址法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值