散列:散列函数

如何完成令人满意的散列呢?需要完成两个基本的任务 1 设计散列函数 2 制定预案,发生冲突后可以排解

什么样的散列函数更好呢?

1 确定,同一关键码总是被映射到同一地址

2 快速 expected---O(1)

3 满射 尽可能充分地覆盖整个散列空间  

4 均匀 关键码映射到散列表各位置的概率尽量接近,可有效避免聚集现象

确定散列函数的一些方法

1 除余法 hash(key)=key%M,M要取素数

2 MAD法 除余法缺陷,1不动点:无论表长M取值如何,总有hash(0)恒等于0

                                        2零阶均匀:[0,R)关键码,平均分配至M个桶;但相邻关键码的散列地址也必相邻

                  所以取M为素数,a>0,b>0,a%M不等于0,hash(Key0=(a*key+b)%M

3 数字分析 抽取key中的某几位,构成地址  

4 平方取中 取key^2的中间若干位,构成地址,比如hash(123)=512,key^2=15129

5 折叠法 将key分割成等宽的若干函数,取总和作为地址

注意的是如果key为字符串该如何处理呢?下面给出方法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值