除法散列函数之散列值问题

算法导论对于除法散列函数的描述。其中涉及到一小点数学问题:

k mod m时,m之所以为素数时为了使得k在m所在的素数域上保持唯一性(根据欧拉定理和费马小定理)

散列函数: 

  1. H(k) = k Mod m  

其中m的取值如是描述:

应用除法散列法的时候,要避免选择m的某些值,例如,m不应该为2 的幂 。(尽量取素数,并且距离 2^p 比较远的数值。 )因为如果 m = 2^p (2的p次方),则 H(k) 就是k的p个最低位数字。除非一直各种最低p位的排列形式为等可能的,否则在设计散列函数的时候,最好考虑关键字的所有位。

解释一下:

如果 m = 2^p (2的p次方),则 H(k) =k Mod m 就等价于 k的低m位与 m 求余所得的值。例如:m = 8 = 2^3 。那么,1456 Mod 8 = 2456 Mod 8 = 3456 Mod 8 = 4456 Mod 8 = 456 Mod 8 ………… 如果这样的话,那么H(k)重复得概率就会大大的增加了。

“除非已知各种最低p位的排列形式为等可能的”这句话的意思是,如果低位p位在所有k中出现的概率是相同的,那么就可以使用2^p 来作为散列值。“否则在设计散列函数的时候,最好考虑关键字的所有位。”也就是尽量考虑到所有的位数。

希望解释的能够看懂^^^^^看不懂的只能回家了,不要写代码了........

附:

费马小定理是数论中的一个重要定理,其内容为: 假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p) 假如p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1。假如p是一个质数的话,则2^(p-1)≡1(mod p)成立(这是费马小定理的一个特殊情况)是对的。但反过来,假如2^(p-1)≡1(mod p)成立那么p是一个质数是不成立的(比如341符合上述条件但不是一个质数)。

转载于:https://my.oschina.net/lvzhitao/blog/782741

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值