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


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

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

散列函数: 

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符合上述条件但不是一个质数)。

你可能感兴趣的:(除法散列函数之散列值问题)