某以竞赛闻名的学校下发的课件中有这样一段话:
直接取余法
我们用关键字k除以M,取余数作为在Hash表中的位置。函数表达式可以写成:h(k)=k mod M
例如:表容量M=12,关键值k=100,那么h(k)=4。该方法的好处是实现容易切速度快,但是如果M选择的不好而偏偏标本又很特殊,那么数据容易在Hash中扎堆而影响效率。
对于M的选择,我们一般选择不太接近2n的一个素数;如果关键值值域较小,我们一般在此值域1.1—1.6倍范围内选择。例如k的值域为[0,600],那么M=701即为一个不错的选择。
话说值域为 k 的情况下你模数取得比 k 还大哈希不是完全没有意义吗。。。
还是说我对哈希有什么误解。。。