您当前的位置: 首页 >  散列表

散列表(哈希表)

发布时间:2019-05-02 13:56:45 ,浏览量:0

构造散列函数的两个基本原则

在这里插入图片描述

直接定址法

取关键字的某个线性函数值为散列地址,即f(key)=a*key+b。

数字分析法

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

平方取中法

平方取中法是将关键字平方之后取中间若干位数字作为散列地址。

折叠法

折叠法是将关键字从左到右分割成位数相等的几部分,然后将这几部分叠加求和,并按散列表表长取后几位作为散列地址。

除留余数法

此方法为最常用的构造散列函数方法,对于散列表长为m的散列函数计算公式为: f(key) = key mod p(p<=m)

事实上,这个方法不仅可以对关键字直接取模,也可以通过折叠、平方取中后再取模。

随机数法

选择一个随机数,取关键字的随机函数值为它的散列地址,即:f(key) = random(key)。 这里的random是随机函数,当关键字的长度不等时,采用这个方法构造散列函数是比较合适的。

视不同的情况采用不同的散列函数

现实中,应该视不同的情况采用不同的散列函数,参考方向: ·计算散列地址所需的时间 ·关键字的长度 ·散列表的大小 ·关键字的分布情况 ·记录查找的频率

处理散列冲突的方法 开放定址法

所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。

它的公式是: fi(key) = (f(key)+di) MOD m (di=1,2,…,m-1)

可以修改di的取值方式,例如使用平方运算来尽量解决堆积问题: fi(key) = (f(key)+di) MOD m (di=1²,-1²,2²,-2²…,q²,-q²,q<=m/1)

还有一种方法是,在冲突时,对于位移量di采用随机函数计算得到,我们称之为随机探测法: fi(key) = (f(key)+di) MOD m (di是由一个随机函数获得的数列)

再散列函数法

fi(key) = RHi(key) (i=1,2,3,…k)

链地址法 公共溢出区法
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109769博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0481s