你好奇过‘浅谈哈希’背后的吗?

2026-05-21 00:413阅读0评论运维
  • 内容介绍
  • 文章标签
  • 相关推荐

先说说你有没有在凌晨三点半还在翻看《浅谈哈希》那本书?我真的好 摆烂... 奇——到底是什么把我们拽进了这堆看似随意却暗藏玄机的散列函数里?

哈希到底是啥玩意儿?

哈希啊, 就是把任意长度的「东西」压成固定长度的「碎片」——听起来像是魔法,其实就是数学里的一种映射。它把大象塞进蚂蚁盒子,所以必然会有「碰撞」——两个大象恰好进了同一个盒子,优化一下。。

浅谈哈希

想象一下 你把一堆乱七八糟的密码、文件名、甚至是你的猫叫声全都丢进同一个罐子里然后掐指一算:「哎呀,这俩居然同号!」这就是冲突,别慌,用双哈希或者更大的模数去「逼」它们分开。

单哈希 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 的字符矩阵,要判断两个子矩阵是否完全相同。

阅读全文