您的位置:首页 > 其它

关于理解哈希表的除法散列法(取余法)

2014-10-16 13:58 190 查看
《算法精解:C语言描述》上提到的一种简单的将键值k映射到m槽位的方法:h(k)=k mod m。

而该书上写了一段话:“通常情况下,要避免m取2的幂,因为假设m=2^p,则h(k)是k的二进制数的低p位......,通常选择m会是一个素数,而且不那么靠近2的幂......”。这段话理由是:
以 m = 2^3 = 8 为例,如下图所示:



从概率的角度,出现相同的概率比较高,而通常我们希望 h(k) 的值依赖于 k 的所有位而不是最低 p 位,因为这样才会使得散列表看起来更均匀。当m不是素数时在散列分布时也会增加分布不均匀的机会,总的来说哈希函数的设计尽量使键值均匀、随机地分布在表中,其他方法可以参考《算法导论》。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: