算法导论-除法散列法

h ( k ) = k m o d    m h(k) =k \mod m h(k)=kmodm
当应用除法散列法时,要避免选择m的某些值。例如,m不应该是2的幂,因为如果 m = 2 p m=2^p m=2p,则h(k)就是kp个最低位数。除非已知各种最低p位的排列形式为等可能的,否则在设计函数时,最好考虑关键的所有位。

这段话什么意思呢?当 m = 2 3 m=2^3 m=23结果就会这样:

57   m o d   8 ≡ 1057   m o d   8 ≡ 3057   m o d   8 ≡ 10057   m o d   8 ≡ 1 57 \bmod 8 \equiv 1057 \bmod 8 \equiv 3057 \bmod 8 \equiv 10057 \bmod 8 \equiv 1 57mod81057mod83057mod810057mod81

只要低3位是057,余数结果都一样。

为什么呢?
假设, m = 2 p m=2^p m=2p ,k的低3位是 r 0 r_0 r0

  • 当k的位数小于等于p时: 余数就是k除以 r 0 r_0 r0的余数

  • 当k的位数大于p时:
    k = r 1 ∗ 1 0 p + m + r 0 ( m > 0 ; m 、 r 1 、 r 0 都 是 整 数 ; r 0 为 低 3 位 ) k = r 1 ∗ 2 p + m ∗ 5 p + m + r 0 k=r_1*10^{p + m} + r_0 (m\gt0; m、r_1、r_0都是整数;r_0为低3位)\\ k=r_1*2^{p + m}*5^{p + m} + r_0 k=r110p+m+r0(m>0mr1r0r03)k=r12p+m5p+m+r0
    k除以 m = 2 p m=2^p m=2p的余数就是k除以 r 0 r_0 r0的余数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一本郑经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值