rambo

HashTable(二)字符串Hash函数(转载)

字符串hash函数非常多,常见的主要有Simple_hash, RS_hash, JS_hash, PJW_hash, ELF_hash, BKDR_hash, SDBM_hash, DJB_hash, AP_hash, CRC_hash等。

评估hash函数优劣的基准主要有以下两个指标:

(1) 散列分布性:即桶(list)的使用率backet_usage = (已使用桶数) / (总的桶数),这个比例越高,说明分布性良好,是好的hash设计。

(2) 平均桶长:即avg_backet_len,所有已使用桶的平均长度。理想状态下这个值应该=1,越小说明冲突发生地越少,是好的hash设计。

评估方案设计是这样的:

(1) 以200M的视频文件作为输入源,以4KB的块为大小计算MD5值,并以此作为hash关键字;或者随机生成1000个字符串,每个字符串的长度均为10。将这1000个 字符串写入一个文件test.txt。

(2) 分别应用上面提到的各种字符串hash函数,进行hash散列模拟;

(3) 统计结果,用散列分布性和平均桶长两个指标进行评估分析。

实验的结果如下:

表格中字符串的解释,参见如下注释:

QQ截图20150909221452

以上实验结果使用的装填因子是1,装填因子更小些,更能评估不同hash函数散列结果的好坏。

参考资料:

1)http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/2625659.html

2)http://blog.csdn.net/liuaigui/article/details/5050697#reply

2)http://blog.csdn.net/love__coder/article/details/8274886

3)http://blog.csdn.net/sangyongjia/article/details/37312851

 

附录:有bug,有待调试