Hash表

Posted JetHu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hash表相关的知识,希望对你有一定的参考价值。

1.哈希表最重要的作用是实现O(1)效率的查找,首先有一个哈希函数确定元素在表中的位置;其次是解决冲突,其实现主要有两种:

(1)链地址法:数组+链表 
(2)探测法(开放地址法,线性、二次):哈希函数为 H[i](x)= (hash(x)+f(i)) mod TableSize 。H[i](x)为表中位置, f(i)为解决冲突的函数   f(0)=0,线性探测f(i)=i。
2.链地址哈希表装填因子一般接近1。链地址法当装载因子超过0.5时,性能急速下降,此时可以考虑扩展哈希表。其他还有布谷鸟散列和跳房子散列。
3.通用散列函数:Ha,b(x)=((ax+b) mod p) mod M 其中p为素数,M为表大小,0 <a,b<=p-1。
4.散列表不能直接找出最小、最大元素,跟排序相关的数据最好用二叉查找树(输入数据可能有序的时候一般不用,效率很差),不需要有序或者对输入数据有序存有怀疑可以选用哈希表。
5.对于任何带有实际名字而非数字的节点的图论问题优先考虑哈希表。
6.String类型的哈希值为各个字符的ASCII码值乘以37后累加而成,因为String对象是常量,所以进行再散列时我们可以避免昂贵的重复计算哈希函数,这个技巧叫做闪存散列代码。

以上是关于Hash表的主要内容,如果未能解决你的问题,请参考以下文章

深入了解STL中set与hash_set,hash表基础

hash表学习笔记

[转]Hash表

Hash表

算法设计之hash---hash 函数hash表

hash表原理