【算法笔记】全域哈希表

本文深入探讨了全域哈希表的概念及其在解决哈希表碰撞问题中的应用。通过引入随机性和全域哈希函数,有效降低了不同键值碰撞的概率,提高了哈希表的效率。文章还详细介绍了全域哈希的一种典型构造方法,以及其全域性的数学证明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引入

在一般的哈希表中,有一个显著的缺点:无论选择什么样的哈希函数,总存在一条键值输入序列,这条序列中的每一个键值都会被哈希映射到同一个槽中,导致形成的哈希表只是一条链表,效率较低。
首先需要明确,这个问题的产生是由于哈希函数的确定性,如果哈希函数是不定的,则可以解决这个问题。由此引入随机性。

全域哈希表定义

UUU为键值的全集,HHH为哈希函数的有限集,哈希表的槽数量为mmm,若∀x,y∈U,x≠y,∣\forall x,y\in U,x≠y,|x,yU,x=y,{h∣h∈H,h(x)=h(y)h|h∈H,h(x)=h(y)hhH,h(x)=h(y)}∣=∣H∣m|=\frac{|H|}{m}=mH,即对于任意两个不同的键对,哈希函数集合中能将其映射到同一个槽的哈希函数数量为哈希函数集合的大小与槽的数量的比值,则该哈希表称为全域哈希表。

全域哈希表分析

在全域哈希表中,两个不同键值碰撞的概率为1m\frac{1}{m}m1,分析如下:随机从HHH中选出的哈希函数能使两个不同键值碰撞的数量为∣H∣m\frac{|H|}{m}mH,这个数除以哈希函数总数∣H∣|H|H,即碰撞概率1m\frac{1}{m}m1

此外,全域哈希表有一个定理:从HHH中随机选择哈希函数,将nnn个键放入哈希表中的mmm个槽中,发生碰撞的总次数的期望值小于填装因子α=nm\alpha=\frac{n}{m}α=mn.

证明略,提示如下:可用随机变量证明,证明中需要用到期望的线性性质

全域哈希一种典型构造

首先,哈希表槽数量mmm需要为质数。将给定键值kkk转换为r+1位的mmm进制数,形成一个序列k0k1...krk_0k_1...k_rk0k1...kr,同时随机选取一个r+1位的mmm进制数a=a0a1...ara_0a_1...a_ra0a1...ar

哈希函数ha(k)=∑i=0r(aiki)mod  mh_a(k)=\sum_{i=0}^r(a_ik_i)\mod mha(k)=i=0r(aiki)modm

对于该哈希函数的全域性,证明如下:

  • 假设有两个不同的键x=x0x1...xrx=x_0x_1...x_rx=x0x1...xr,y=y0y1...yry=y_0y_1...y_ry=y0y1...yr。首先需要明确一点,两个键至少有一位是不相同的,但是不管哪一位不相同,运算是相同的,具有对称性。不妨假设第0位不相同,其他位置都相同。

  • 如果x与y映射到了同一个槽,则有∑i=0r(aixi)≡∑i=0r(aiyi)(mod  m)\sum_{i=0}^r(a_ix_i)\equiv\sum_{i=0}^r(a_iy_i)(\mod m)i=0r(aixi)i=0r(aiyi)(modm)

  • ∑i=0r(ai(xi−yi))≡0(mod  m)\sum_{i=0}^r(a_i(x_i-y_i))\equiv0(\mod m)i=0r(ai(xiyi))0(modm)

  • a0(x0−y0)≡−∑i=1r(ai(xi−yi))(mod  m)a_0(x_0-y_0)\equiv-\sum_{i=1}^r(a_i(x_i-y_i))(\mod m)a0(x0y0)i=1r(ai(xiyi))(modm)

  • 引入数论中的一个有限域理论:

mmm为一个质数,ZmZ_mZm是对mmm取余后的整数,对于任意不为0的z∈Zmz∈Z_mzZm,存在唯一的一个z−1∈Zmz^{-1}∈Z_mz1Zm,使得z−1⋅z≡1(mod  m)z^{-1 }·z≡1 (\mod m)z1z1(modm)

  • a0≡(−∑i=1r(ai(xi−yi)))(x0−y0)−1(mod  m)a_0\equiv(-\sum_{i=1}^r(a_i(x_i-y_i)))(x_0-y_0)^{-1} (\mod m)a0(i=1r(ai(xiyi)))(x0y0)1(modm)
  • 这个公式表明,如果aaa的第0位与上述右式同余mmm,则xxxyyy将被映射到同一个槽中,因为a0a_0a0的取值为0到m-1,故要使x与y碰撞,a0a_0a0只有一种取值,其他为有m种取值,满足这种条件的aaam∗m∗⋯∗m⏟r∗1\begin{matrix} \underbrace{ m*m*\cdots*m } \\ r\end{matrix}*1mmmr1个,即mrm^rmr个,同时需要注意到哈希函数集HHH的大小为mr+1m^{r+1}mr+1mr=mr+1mm^r=\frac{m^{r+1}}{m}mr=mmr+1,证毕,该哈希为全域哈希。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值