散列表(hash table)的实现叫做散列(hashing)。这是以常数平均时间O(1)进行插入、删除和查找的技术。散列表没有顺序,需要元素间排序信息的操作,如findMin、findMax不会得到有效支持(就是这东西不是这么用的,你可以实现,但效率不会很高)。理想情况下,散列表是一个包含关键字的具有固定大小的数组,数组大小一般被视为散列表的一部分。数据通过散列函数简单的计算映射到数组适当的位置上,理想情况下当然是每个关键字对应一个位置,但这是不可能的。关键字那么多,数组大小总是有限的,总会有那么两个关键字被映射到同一个位置。因此我们放宽要求,希望散列函数简单,而且使关键字分布得比较均匀。一般关键字有整数和字符串,对应就有不同的散列函数,这里介绍几种散列函数:
关键字为整数:
1、取余法
用关键字对M取余作为散列地址,散列函数为hash(x)=x mod M,M一般为数组大小。这里的数组大小需要仔细考虑,设想如果M=10,而关键字都以0结尾,他们将会全部散列到0这个位置。一般取M为素数是比较好的选择。当然对于取余法还有很多可以改进的地方,比如对x进行线性运算(a*x+b)再取余来增大每个x的间隔,x乘一个小数对结果的小数部分进行其他操作等,散列函数还是