全域哈希和完全哈希

全域哈希:
解决普通哈希的缺点: 对任意的hash函数h,总存在一组keys,使得对某个槽i总可以找到一组键值,让他们都映射到同一个槽里面,这样效率就跟离链表差不多了。

解决的思想就是:(加入随机性)
独立于键值,随机的选择hash 函数。这就跟快排中为避免最差情况时随机化版本差不多。

但hash函数类有指定的特点:对于任意的不相等key的x和y, 从哈希函数集中选择一个哈希函数,这两个key,发生冲突的概率是1/m。(m为槽数)

好处:设h是从哈希函数全域集H中随机选出的函数h,h被用作把任意n个键映射到表T的m个槽中,对给定键值x,E[#collision with x]<n/m | 发生碰撞的期望次数小于n/m,即装载因子α。

构造方法:
https://www.jianshu.com/p/226dc1f79114

完全哈希:
当键值是static(即固定不变)的时候,我们可以涉及方案使得最差情况下的查询性能也很出色,这就是完全哈希。

完全哈希可以在最坏情况下以O(1)复杂度查找,性能非常出色的。完美哈希的思想就是采用两级的框架,每一级上都用全域哈希。
在这里插入图片描述
将第一级全域哈希冲突的元素散列到二级哈希(槽数扩大为冲突元素数量的平方)上,使其不再冲突(冲突的几率<1/2),若继续冲突,则尝试其他哈希函数,很容易就得到不冲突的哈希函数。(数据为静态)

同时,在一个完全哈希方案中,存储所有二次哈希表所需的存储总量期望值小于2n(空间复杂度期望为线性),所以只需从全域哈希函数类中随机选择哈希函数,尝试几次就可以快速找到一个所需存储量较为合理的函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值