hash--学习笔记

存储位置=f(关键字)

那样我们可以通过查找关键字不需要比较 就可获得需要记录的存储位置。这就是一种新的存储技术--散列技术。

散列技术是再记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。我们把这种对应关系f称为称为散列函数,又称为哈希函数。采用散列技术将记录,存储在一块连续的存储空间称为散列表或哈希表。

哈希表的长度一定要为质数,因为要让其分布均匀。

哈希表的缺点,表越满,性能越差,越容易发生冲突,增加计算次数。

如果哈希表满了,就再次哈希,新表尺寸为旧表的两倍以上,为质数。

散列表的构造方法

1.计算简单

2.散列地址分布均匀

直接定址法

取关键字的某个线性函数值为散列地址

f(key)=a*key+b;(a,b为常数)

数字分析法

抽取:使用关键字的一部分来计算散列存储位置的方法。

数字分析法通常适合处理关键字位数比较多的情况。

平方取中法

先平方,再取中间几位

折叠法

除留余数法f

f(key)=keymodp(p<=m)m为表长

 方法关键在于选择合适的p

随机数法

选择一个随机数,取关键字的随机函数作为它的散列地址。也就是f(key)=random(key)。

哈希冲突

线性探测法

顺位向下放

平方探测法

往(原始位置+i*i)的位置寻找空位(i代表查找次数)

双哈希

设置第二个哈希函数(为了冲突准备的),hash2(key)=R-(keymodR),R为比数组尺寸小的质数。

新位置=原始位置+i*hash2;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值