引言
说真的,我第一次接触这些高级哈希概念时,脑子里只有三个字:啥玩意儿?今天我就用最接地气的方式,带你彻底搞懂哈希函数。
一、哈希到底在干啥?
1.1 哈希的本质就是"分桶"
想象你有一个超大的玩具箱,里面有1000个不同的玩具。现在你想快速找到“红色的小汽车”,怎么办?
原始方法查找:一个一个翻 → O(n) 慢死了! 哈希查找:把玩具分类 → 红色玩具放红桶,蓝色玩具放蓝桶...哈希表就是干这个的:把数据分散到不同的“桶”里,找的时候直接去对应的桶里拿。
1.2 普通哈希的问题所在
# 我们先用一个简单的哈希函数为例:取余数defsimple_hash(key,table_size):returnkey%table_size# 问题来了:如果所有key都是10的倍数呢?keys=[10,20,30,40,50]table_size=5forkeyinkeys:print(f"{key}→ 桶{simple_hash(key,table_size)}")# 输出:全部进入桶0!这就是哈希碰撞:多个数据挤进同一个桶,链表变长,查找变慢。
最坏情况:所有数据进一个桶 → 退化成链表 → O(n)二、全域哈希
2.1 核心思想:随机应变
普通哈希的问题是:哈希函数固定,攻击者可以构造恶意数据。
全域哈希的解决方案:
不用一个哈希函数,而是准备一个函数家族 每次运行时,随机挑一个用 攻击者:你猜我今天用哪个?😏