对于从 0 到 2020 的 i,以下哪个整数散列函数将最均匀地将键分布在编号为 0 到 9 的 10 个桶上?
(A) h(i) = i 2 mod 10
(B) h(i) = i 3 mod 10
(C) h(i) = (11 ∗ i 2 ) mod 10
(D) h(i) = (12 * i) mod 10答案:(乙)
说明:由于使用了 mod 10,最后一位数字很重要。
如果你对从 0 到 9 的所有数字进行立方运算,你会得到以下结果
Number Cube Last Digit in Cube
0 0 0
1 1 1
2 8 8
3 27 7
4 64 4
5 125 5
6 216 6
7 343 3
8 512 2
9 729 9
因此,从 0 到 2020 的所有数字均等分为 10 个桶。如果我们为正方形制作一张桌子,我们就不会得到均等的分配。在下表中。 1、4、6 和 9 是重复的,所以这些桶会有更多的条目,而桶 2、3、7 和 8 将是空的。
Number Square Last Digit in Cube
0 0 0
1 1 1
2 4 4
3 9 9
4 16 6
5 25 5
6 36 6
7 49 9
8 64 4
9 81 1
替代方法——
使用循环幂的概念:
(a) (0,1,4,9,6,5,6,9,4,1,0) 重复
(b) (0,1,8,7,4,5,6,3,2,9) 重复
(c) (0,1,4,9,6,5,6,9,4,1,0) 重复
(d) (0,2,4,6,8) 重复
因此,只有 h(i) =i 3 mod 10 涵盖了从 0 到 9 的所有数字。
选项(B)是正确的。
这个问题的测验