为什么求模运算要用素数(质数)
2016-04-02 17:53
288 查看
好的HASH函数需要把原始数据均匀地分布到HASH数组里
原始数据不大会是真正的随机的,可能有某些规律,
比如大部分是偶数,这时候如果HASH数组容量是偶数,容易使原始数据HASH后不会均匀分布。
比如 2 4 6 8 10 12这6个数,如果对 6 取余 得到 2 4 0 2 4 0 只会得到3种HASH值,冲突会很多
如果对 7 取余 得到 2 4 6 1 3 5 得到6种HASH值,没有冲突
同样地,如果数据都是3的倍数,而HASH数组容量是3的倍数,HASH后也容易有冲突
用一个质数则会减少冲突的概率
参考
http://www.xuebuyuan.com/2177964.html http://www.vvbin.com/?p=376
原始数据不大会是真正的随机的,可能有某些规律,
比如大部分是偶数,这时候如果HASH数组容量是偶数,容易使原始数据HASH后不会均匀分布。
比如 2 4 6 8 10 12这6个数,如果对 6 取余 得到 2 4 0 2 4 0 只会得到3种HASH值,冲突会很多
如果对 7 取余 得到 2 4 6 1 3 5 得到6种HASH值,没有冲突
同样地,如果数据都是3的倍数,而HASH数组容量是3的倍数,HASH后也容易有冲突
用一个质数则会减少冲突的概率
参考
http://www.xuebuyuan.com/2177964.html http://www.vvbin.com/?p=376
相关文章推荐
- springMVC如何访问静态文件
- 2016-AspNet-MVC教学-8-异步Controller的应用
- 【一天一道LeetCode】#5 Longest Palindromic Substring
- 【一天一道LeetCode】#5 Longest Palindromic Substring
- ROS简明教材目录
- 黄金点游戏
- == 区别 equals
- C语言,函数指针与指针函数
- plantuml
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
- 排序-直接插入排序
- java面向对象中的方法重载与方法重写的区别
- 图解VC++ opengl环境配置和几个入门例子
- 纯JS实现中国行政区域上下联动选择地址
- hdoj 天气情况 1437 (打表&数学)
- 【BZOJ 1875】【SDOI 2009】HH去散步
- nyoj拦截导弹
- 给2016年的自己
- ubuntu12.04+ros fuerte 跑ORB_SLAM代码
- Java序列化与反序列化