自然溢出哈希
typedef unsigned long long ull;
ull base = 131;
ull hashe(char s[]){
ull ans = 0;
int len = strlen(s);
for(int i = 0;i < len;i ++)
ans = ans * base + (ull) s[i];
return ans & 0x7fffffff;
}
单模数哈希
typedef unsigned long long ull;
ull base = 131;
ull mod = 19260817;
ull hashe(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod;
return ans;
}
双模数哈希
typedef unsigned long long ull;
ull base = 131;
ull mod1 = 19260817;
ull mod2 = 19660813;
ull hash1(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod1;
return ans;
}
ull hash2(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod2;
return ans;
}
大数哈希
typedef unsigned long long ull;
ull base = 131;
ull mod = 212370440130137957ll;
ull hashe(char s[]){
int len = strlen(s);
ull ans = 0;
for(int i = 0;i < len;i ++)
ans = (ans * base + (ull) s[i]) % mod;
return ans;
}
好像双模数哈希比较难被卡掉
本文介绍了几种哈希函数的实现方式,包括自然溢出哈希、单模数哈希、双模数哈希和大数哈希。这些方法用于高效地对字符串进行哈希计算,减少碰撞发生的可能性。双模数哈希由于使用了两个不同的模数,相对更难被针对性攻击。文章探讨了哈希函数在信息技术领域的应用及其重要性。
1万+

被折叠的 条评论
为什么被折叠?



