散列表(Hash Table)总结

复习了下散列表(Hash Table),总结如下:
1.直接寻址表
   直接送数组进行对应,但是当要存储的关键字集合K相对于域U很小时,就会很浪费空间。
2.散列表
   利用Hash函数进行映射
   “碰撞”发生时,利用链接法解决
3.散列函数的选择
   3.1除法散列表
        h(k) = k mod m,m是与2的整数幂不太接近的质数
   3.2乘法散列表
        h(k) = 【m*(k*A mod 1)】向下取整,其中A最好取0.618.......
   3.3全域散列
        ha,b(k) = ((a*k + b) mod p) mod m,a属于{1, 2 ..., p-1},b属于{0, 1 ..., p-1},p是质数,k都落在{0, 1, ..., p-1}中,p > m
4.开放寻址法
   4.1线性探查
        h(k, i) = (h'(k) + i) mod m, 其中i = 0, 1, ..., m-1,但容易造成一次群集,即随着时间的推移,连续被占用的槽不断增加,平均查找时间也随着不断增加。
   4.2二次探查
        h(k, i) = (h'(k) + c1*i + c2*i2) mod m,其中h'(k)为辅助散列函数,c1和c2为辅助常数,i = 0, 1, ..., m-1,虽比线性探查优化了一点,但会造成二次群集。
   4.3双重散列
        h(k, i) = (h1(k) + i*h2(k)) mod m,其中h2(k)的值要与表的大小m互质,如我们可以取m为一质数
        h1(k) = k mod m,h2(k) = 1 + (k mod m'),m’略小于m,可以取值为m-1.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值