取模运算常常对应于hash散列;
k%m
如果从映射(map)的角度看待取模运算的话,其实是对原始空间取值范围的一种放缩,比如缩放到 [0,m−1] (整数)。
如果这时
m=2r
的话,也即:
k%2r
如果将 k 也转化为二进制的话,最终映射的值域为对
如 r=2 (保留最后的 2 位):
- 1 ⇒ 001 ⇒ 01
- 2 ⇒ 010 ⇒ 10
- 3 ⇒ 011 ⇒ 11
- 4 ⇒ 100 ⇒ 00
- 5 ⇒ 101 ⇒ 01
- 6 ⇒ 110 ⇒ 10
- 7 ⇒ 111 ⇒ 11
- 8 ⇒ 1000 ⇒ 00
- 9 ⇒ 1001 ⇒ 01
- …
同样这也不是一个好的
一个好的选择是选择一个质数(prime)作为