字符串hash
来源:互联网 发布:智慧办公软件下载 编辑:程序博客网 时间:2024/05/18 13:30
常用的几个字符串hash法
•1. unsigned long long hash[N];
hash[i]=hash[i-1]*p(自动取模)
解释:
unsigned long long hash[N];
定义一个unsigned long long类型的变量,它的范围是在[0, 2^64) 内,这就相当于,当数超不过2^64-1后,它会溢出!这就相当于一个数模2^64的过程。
那么hash函数可以理解为:
hash[i]=(hash[i-1]*p)%(2^64)
P取一个大素数,一般习惯取1e9+7或1e9+9
安全指数:三星(所以并不是很安全)
•2. hash[i]=(hash[i-1]*p+idx(s[i]))%mod
解释:
这个之前已经提到过了。
hash[i]=(hash[i-1]*p+idx(s[i]))%mod
p取一个6到8位的素数,mod取一个大素数,一般取1e9+7或1e9+9
安全指数:四星 (还可以)
•3. 双hash
hash1[i]=(hash1[i-1]*p+idx(s[i]))%mod1
hash2[i]=(hash2[i-1]*p+idx(s[i]))%mod2
pair<hash1,hash2>表示一个字符串!
解释:
double hash
即取两个mod值,mod1和mod2
hash1[i]=(hash1[i-1]*p+idx(s[i]))%mod1
hash2[i]=(hash2[i-1]*p+idx(s[i]))%mod2
mod1一般取1e9+7,mod2一般取1e9+9为什么这么取?
1000000007和1000000009是一对孪生素数,取它们,冲突的概率极低!
安全指数:五星!(非常稳!)
小结:
•可以这么说,hash某种程度上就是乱搞,把hash函数弄的越没有规律越好,使得冲突的概率小到 大部分数据都卡不掉。
•如果你开心,你想triple hash,ultra hash,rampage hash… 都没有问题!
但请注意,hash的维度越高,耗时越高,耗内存越大!一般情况下,single hash可以被hack掉,但double hash极难被hack掉, 用double hash足以解决问题
0 0
- 字符串hash
- 字符串HASH
- 字符串Hash
- 字符串hash
- 字符串hash
- 字符串hash
- 字符串Hash
- 字符串hash
- 字符串hash
- 字符串 HASH
- 字符串Hash
- 字符串hash
- 字符串hash
- 字符串hash
- 字符串hash
- 字符串hash
- 字符串hash
- 字符串Hash:各种字符串Hash函数比较
- 使用多行文本Textarea大小设置与resize属性结合使用
- 串匹配 KMP
- QuickHit项目源代码及小总结
- Redis基础学习--持久化(数据备份与恢复)、复制、安全、通信协议、管理工具
- Webstorm涉及的基本一些操作
- 字符串hash
- CSS中的背景颜色和图片
- 通讯录
- ThinkPHP3.2.3验证码显示、刷新、校验
- C/C++的堆栈,内存分配
- 基本界面组件~TextView~EditText~Button
- 银行家算法
- Python学习笔记(3)-操作列表
- 『sklearn学习』沃德结构层次聚类的浣熊脸图像的演示