【算法导论随笔】第三部分 数据结构

【算法导论随笔】第三部分 数据结构

散列:
除法散列 % 例如有n=2000个字符串,每一次查找平均需要检查3个元素,则散列表大小701(最接近的素数)
散列函数:h(k)=k%701

乘法散列

二、基于乘法的哈希函数
  h(k) = floor(m(kA mod 1))
  其中,A: 0<k<1,mod 1表示取出kA的小数部分,floor(x)表示不大于x的最大整数, 值得注意的是:
  kA mod 1 = kA - floor(kA)
  在乘法的情况中,对于m的选择与除法时刚好相反,倾向于选择2的幂,同时,会把A表示为s/(2^w)的形式(其中w是计算机的位数).TAOCP的作者Knuth建议采用A为0.618…也就是我们所知的黄金分割比。通过这样的设定,这个哈希函数的执行得到了一定的简化。如k = 123456, m = 16384(即2^14),w = 32 时, 可将A表示为特定的形式:2654435769/(2^32).

在这里插入图片描述
在这里插入图片描述
对乘法哈希理解:A其实可看作小数部分,所以我后来取结果小数部分。
在这里插入图片描述

在这里插入图片描述

全域散列函数
构造一个:
在这里插入图片描述
把k分解成r+1位的m进制数,选随机的一个m进制数a,然后用图里公式算h(k)

碰撞频率

先%再加=加完再%
在这里插入图片描述移项

在这里插入图片描述

利用了一个数论
在这里插入图片描述

得到a0(或任意一项)是由其他项确定。因此确定了其他r个选择,最后一个也被确定了。所以能碰撞的函数一定是m中的一个

开放寻址:

一直哈希下去直到有空槽
在这里插入图片描述
插入最多换多少次那搜索最多就搜多少次

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值