你好奇过‘浅谈哈希’背后的吗?
- 内容介绍
- 文章标签
- 相关推荐
先说说你有没有在凌晨三点半还在翻看《浅谈哈希》那本书?我真的好 摆烂... 奇——到底是什么把我们拽进了这堆看似随意却暗藏玄机的散列函数里?
哈希到底是啥玩意儿?
哈希啊, 就是把任意长度的「东西」压成固定长度的「碎片」——听起来像是魔法,其实就是数学里的一种映射。它把大象塞进蚂蚁盒子,所以必然会有「碰撞」——两个大象恰好进了同一个盒子,优化一下。。

想象一下 你把一堆乱七八糟的密码、文件名、甚至是你的猫叫声全都丢进同一个罐子里然后掐指一算:「哎呀,这俩居然同号!」这就是冲突,别慌,用双哈希或者更大的模数去「逼」它们分开。
单哈希 vs 双哈希:谁更靠谱?
单哈希就像只用一根尺子测量所有东西, 省事儿但精度低;双哈希则是两根尺子交叉验证——虽然慢一点, 坦白说... 却能大幅降低误判几率。很多大厂在做防刷时都偷偷用了双哈希,只是不想让你知道。
谨记... 不过 有人说双哈希太贵,还不如直接用map存原始字符串……这就是技术选型的“哲学争论”。
常见的散列基数 & 常用常量
- 基数 131、 13331、146527——这些都是经验值,选得好能让冲突概率降到几乎为零。
- 模数 109+7、 998244353——大质数,让溢出变得可控。
- P 进制转换:把字符当作数字乘基数累加,就像把字母串变成一个巨大的多项式。
代码片段乱弹
物超所值。 int hash1{ long long h=0; for h = h*131 + c; return h % 1000000007; }
这俩函数配合起来就能实现「双重保险」的散列检测。
实战:用哈希快速判断子矩阵相等
假设我们有一个 N×M 的字符矩阵,要判断两个子矩阵是否完全相同。
先说说你有没有在凌晨三点半还在翻看《浅谈哈希》那本书?我真的好 摆烂... 奇——到底是什么把我们拽进了这堆看似随意却暗藏玄机的散列函数里?
哈希到底是啥玩意儿?
哈希啊, 就是把任意长度的「东西」压成固定长度的「碎片」——听起来像是魔法,其实就是数学里的一种映射。它把大象塞进蚂蚁盒子,所以必然会有「碰撞」——两个大象恰好进了同一个盒子,优化一下。。

想象一下 你把一堆乱七八糟的密码、文件名、甚至是你的猫叫声全都丢进同一个罐子里然后掐指一算:「哎呀,这俩居然同号!」这就是冲突,别慌,用双哈希或者更大的模数去「逼」它们分开。
单哈希 vs 双哈希:谁更靠谱?
单哈希就像只用一根尺子测量所有东西, 省事儿但精度低;双哈希则是两根尺子交叉验证——虽然慢一点, 坦白说... 却能大幅降低误判几率。很多大厂在做防刷时都偷偷用了双哈希,只是不想让你知道。
谨记... 不过 有人说双哈希太贵,还不如直接用map存原始字符串……这就是技术选型的“哲学争论”。
常见的散列基数 & 常用常量
- 基数 131、 13331、146527——这些都是经验值,选得好能让冲突概率降到几乎为零。
- 模数 109+7、 998244353——大质数,让溢出变得可控。
- P 进制转换:把字符当作数字乘基数累加,就像把字母串变成一个巨大的多项式。
代码片段乱弹
物超所值。 int hash1{ long long h=0; for h = h*131 + c; return h % 1000000007; }
这俩函数配合起来就能实现「双重保险」的散列检测。
实战:用哈希快速判断子矩阵相等
假设我们有一个 N×M 的字符矩阵,要判断两个子矩阵是否完全相同。

