Hash表
又称为哈希表、散列表、或是杂凑表,它是一种十分实用的查找技术,具有极高的查找效率。
Hash函数的构造方法
对于Hash函数的构造,没有特定的要求,所以方法很多,只是我们需要了解,什么样的哈希函数,才叫好的Hash函数,这样就便于我们根据实际情况构造合理的Hash函数。
a.直接定址法
去关键字火关键字的某个线性函数值为hash地址,即:
H(key)= key 或 H(key)=a * key + b
b.除余法
以关键码除以表元素总数后的得到的存储地址
c.基数转换法
将关键码看作是某个基数制上的整数,然后将其转换为另一基数制上的数。
d.平方取中法
先通过关键字的平方值扩大相近数的差别,然后根据表长度取中间的几位数作为数列的函数值,又因为一个乘积的中间几位数和乘积的每一位都相关,由此产生的散列地址较为均匀。
e.折叠法
把关键码分成多段,左边的段向右折,右边的向左折,然后将他们叠加。
f.移位法
将关键码分为多段,左边的段右移,右边的段左移,然后将他们叠加
g.机数法
选择一个随机函数,取关键码的随机函数值
处理冲突的方法
1.开放定址法(线性探查法和双散列函数法)
当冲突发生时,使用某种探查技术在散列中形成一个探序列,沿着改序列查找,直到找到关键字或一个开放的地址(地址单元为空)
线性探查法:
冲突后直接向下线性找一个新的空间存放
双散列函数法:
用两个散列函数来解决
2.拉链法
将一个散列表的每个节点增加一个指针字段,用于链接同义词的子表,链表中的节点都是同义词