【数据结构:从0到1】-15-高级哈希函数

引言

说真的,我第一次接触这些高级哈希概念时,脑子里只有三个字:啥玩意儿?今天我就用最接地气的方式,带你彻底搞懂哈希函数。

一、哈希到底在干啥?

1.1 哈希的本质就是"分桶"

想象你有一个超大的玩具箱,里面有1000个不同的玩具。现在你想快速找到“红色的小汽车”,怎么办?

原始方法查找:一个一个翻 → O(n) 慢死了!
哈希查找:把玩具分类 → 红色玩具放红桶,蓝色玩具放蓝桶...

哈希表就是干这个的:把数据分散到不同的“桶”里,找的时候直接去对应的桶里拿。

输入数据
哈希函数
计算桶号
桶0
桶1
桶2
桶...

1.2 普通哈希的问题所在

# 我们先用一个简单的哈希函数为例:取余数
def simple_hash(key, table_size):
    return key % table_size

# 问题来了:如果所有key都是10的倍数呢?
keys = [10, 20, 30, 40, 50]
table_size = 5

for key in keys:
    print(f"{
     
     key} → 桶{
     
     simple_hash(key, table_size)}")
# 输出:全部进入桶0!

这就是哈希碰撞:多个数据挤进同一个桶,链表变长,查找变慢。

最坏情况:所有数据进一个桶 → 退化成链表 → O(n)

二、全域哈希

在这里插入图片描述

2.1 核心思想:随机应变

普通哈希的问题是:哈希函数固定,攻击者可以构造恶意数据
全域哈希的解决方案:

不用一个哈希函数,而是准备一个函数家族
每次运行时,随机挑一个用
攻击者:你猜我今天用哪个?😏
攻击者
系统
试图预测
随机性阻止预测
启动
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QuantumLeap丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值