最近接触到的项目有用到多级哈希做缓存,趁现在有时间,学习并总结一下哈希方面的知识。
一、哈希。
参考学习资料:
http://www.cnblogs.com/waytofall/archive/2012/06/04/2534386.html
http://www.cnblogs.com/egmkang/archive/2012/01/18/2325474.html
http://blog.sina.com.cn/s/blog_6cf921f301015cuw.html
使用:1.哈希值计算方法。 2 比较与匹配方法。
解决冲突的好方法:
1.开链法,用链表保存冲突值。
2.开放地址法,用桶的概念,每个桶存k个元素。冲突的放在这相邻的元素里。 优点是快(缓冲中相邻地址命中率高),缺点是有可能冲突太多存不了。
STL中的hash_map好像是用方法2实现的。。(使用时一定要构建足够的桶数量。)
二、多级哈希
参考学习资料:
http://ahfuzhang.blogspot.com/2012/09/hash.html
https://software.intel.com/zh-cn/articles/hash
特点:
1.二维数组的方式,每一行的个数都是素数。且数量逐行减少。
2.每个桶只存一个元素,用一维数组来具体实现二维的感觉。
3.冲突处理简单,逐行往下处理。
4.实现简单,扩展性强,当无法插入数据时,只需要继续增加阶数即可。
5.查询快速