怎么卡飞哈希
哈希
我们定义一个把字符串映射到整数的函数
一般来说,哈希值都是使用
在这个转移方程中,
生日悖论
如果一个班级有
其实出现这样问题的原因是并没有将“两个人的生日相同”和“有人和自己的生日相同”很好的区分开。
定义两人生日重复的情况叫同生缘。
假设一年有
当
当
可以观察到,在
卡大质数哈希
假设模数为
将这个数据带入上方函数,得到成功让字符串哈希冲突的概率为
所以直接使用随机构造的方式,在一般情况下就可以将其 hack。
#include<bits/stdc++.h>
using namespace std;
int main(){
printf("100000 20\n");
for(int i = 1;i <= 100000;i++){
putchar(rand() % 26 + 'a');
}
return 0;
}
自然溢出
自然溢出,即 hash 数组使用 unsigned long long
,也就是对于
将
底数为偶数
可以构造全部为
因为底数的
底数为奇数
设一些串
定义
定义
构造方法为:
所以:
因为希望产生哈希冲突,即
设
因为每一个
因为
#include <iostream>
#include <cstring>
using namespace std;
char s[10000];
int main(){
cout<<(1<<12)+65<<' '<<(1<<11)<<'\n';
int now=1;
s[1]='a';
for (int i=1;i<=12;i++){
for (int j=1;j<=now;j++) s[now+j]=s[j]=='a'?'b':'a';
now<<=1;
}
for (int i=1;i<=now;i++) printf("%c",s[i]);
for (int i=1;i<=65;i++) putchar('a');
return 0;
}
参考文章 博客园
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下