算法-散列表

1.散列函数

好的散列函数应满足均匀散列假设。

        1.除法散列法

H(k) = k mod m

        2.乘法散列法

H(k)= [m(kA mod 1)], 0<A<1, m一般选择2的某次幂

        3.全域散列法

全域散列法在执行开始时,就从一组精心设计的函数中,随机地选择一个作为散列函数。

2.开放寻址法

        探查序列:线性探查、二次探查、双重探查

        1.线性探查

        H(k, i)= (h1(k)+i)mod m, i=0,1,2,3,4,……m-1

        问题:一次集群。随着连续被占用的槽不断增加,平均查找时间也随之不断增加。连续被占用的槽就会变得越来越长,因而平均查找时间也会越来越大。

        2.二次探查

        H(k, i) = (h1(k)+c1*I +c2*i^2)mod m

        问题:二次集群。如果两个关键字得初始探查位置相同,那么它们得探查序列也是相同的。

        3.双重探查

        H(k, i)=(h1(k)+i*h2(k)) mod m

        H1(k) = k mod m, h2(k) = 1+(k mod m’) , m为素数,m’略小于m(例如m-1)

3.完全散列

        采用两级散列方法来设计完全散列方案,在每级上都采用全域散列。

        第一级与带链接的散列表基本上是一样的:利用从某一全域散列函数簇中仔细选出一个散列函数h,将n个关键字散列到m个槽中。

        采用一个较小的二次散列表,利用精心选择的散列函数hj,可以确保在第二级上不出现冲突。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值