取模运算与hash function
2016-01-24 15:55
225 查看
取模运算常常对应于hash散列;
k%m
如果从映射(map)的角度看待取模运算的话,其实是对原始空间取值范围的一种放缩,比如缩放到 [0,m−1](整数)。
如果这时 m=2r的话,也即:
k%2r
如果将 k 也转化为二进制的话,最终映射的值域为对 k 的二进制形式最后 r 位的截断(可类推至 10r)。
如 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
…
同样这也不是一个好的 m(表示映射过来的slots槽的数量),如果高位不同,只有低位相同的话,不是好的 m,也就意味着不是好的 hash function;
一个好的选择是选择一个质数(prime)作为 m,最好不接近 2 或 10的整数幂;
k%m
如果从映射(map)的角度看待取模运算的话,其实是对原始空间取值范围的一种放缩,比如缩放到 [0,m−1](整数)。
如果这时 m=2r的话,也即:
k%2r
如果将 k 也转化为二进制的话,最终映射的值域为对 k 的二进制形式最后 r 位的截断(可类推至 10r)。
如 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
…
同样这也不是一个好的 m(表示映射过来的slots槽的数量),如果高位不同,只有低位相同的话,不是好的 m,也就意味着不是好的 hash function;
一个好的选择是选择一个质数(prime)作为 m,最好不接近 2 或 10的整数幂;
相关文章推荐
- 【探索】在 JavaScript 中使用 C 程序
- 差分约束 【bzoj2330】[SCOI2011]糖果
- Eigen库数据结构内存对齐问题
- 编程基础——第四单元 字符串
- Android出现:Your project path contains non-ASCII characters.
- this class is not key value coding-compliant for the key countryImageView-bug
- js011-DOM扩展
- python 两种导入的区别
- 一步步教你学web开发
- poj3069
- 编程基础——第三单元 数组
- 几个国内速度最快的centos yum(更新源)
- Anaconda中安装python3.4环境
- 天气预报应用
- Ubuntu14.04安装搜狗拼音输入法开机死机
- 高级特性(12)- 本地方法
- 贪心&Packets
- cf340 C. Watering Flowers
- 软考概述
- IO流 管道流