【笔记】关于构造一个有效的hash函数
2015-10-04 17:57
267 查看
如果采用:
hashresult=(random1*key+random2)mod B
的形式的话,B尽量是一个质数。因为如果B和大部分(random1*key+random2)都具有公因子,将导致hash不均匀。B为(random1*key+random2)的因子这种情况也需要考虑,但是使得B为质数减少了结果不随机的情况。
B的值为小于桶数目的最大质数
例如需要将行排列重新转换时,“行数为质数时才会发生真正的转换”,这时尝试取小于等于行数的质数。必须含有random1和random2。也可以直接mod行数。
可以转化数字的排列,如123改为312来进行哈希,或者寻找key的规律。哈希时是否使用随机数得视情况而定,但B最好一定是质数。
将字符转换为数字:转为ASCII或Unicode码。如果B较大,则可以将字符串拆分为多个组,每个组包含多个字符,一组字符连在一起看成一个整数。
hashresult=(random1*key+random2)mod B
的形式的话,B尽量是一个质数。因为如果B和大部分(random1*key+random2)都具有公因子,将导致hash不均匀。B为(random1*key+random2)的因子这种情况也需要考虑,但是使得B为质数减少了结果不随机的情况。
B的值为小于桶数目的最大质数
例如需要将行排列重新转换时,“行数为质数时才会发生真正的转换”,这时尝试取小于等于行数的质数。必须含有random1和random2。也可以直接mod行数。
可以转化数字的排列,如123改为312来进行哈希,或者寻找key的规律。哈希时是否使用随机数得视情况而定,但B最好一定是质数。
将字符转换为数字:转为ASCII或Unicode码。如果B较大,则可以将字符串拆分为多个组,每个组包含多个字符,一组字符连在一起看成一个整数。
相关文章推荐
- Java常见异常说明汇总
- Java中intern()方法的作用
- 什么是MVC
- 模板list
- 黑马程序员—OC语言的self关键字和super关键字
- IE浏览器和谷歌浏览器主页被篡改,设置无效的解决办法
- SRM 620 D2L3: RandomGraph, dp
- dev初识 拖动分组
- 生命游戏介绍
- 使用循环链表实现约瑟夫环
- Internet采用的网络协议以及该协议的主要层次结构
- tomcat的配置与安装
- Activiti入门教程十一(来杯流程喝喝吧)
- 线程,进程,任务
- BestCoder Round #58(Inversion-线段树)
- C 中的typedef应用
- 结对项目总结
- 四大域对象,和jsp的九大隐式对象,已经el表达式的11个隐式对象
- 20151004的NOIP模拟赛
- 【软件工程】结构化软件设计