一)散列表(哈希表)
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
二)散列函数
散列函数:能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。
1)直接定址法:取关键字或关键字的某个线性函数值为散列地址,即f(key)=a * key +b,a和b为常数。需先知道关键字的分布情况,适合查找表较小且连续的情况。
2)数字分析法:根据关键字位数规则判断,通常适合处理关键字位数比较大的情况。
3)除留余数法:f(key) = key % p (p <= m),最常用。
4)平方取中法:当无法确定关键字的分布,而位数又不是很大的情况。可根据关键字的平方值,获取平方数中间的几位数,如,666^2=443556,就取35或4355。
5)折叠法:将关键字分成位数相同的几部分,比如关键字为987654321,按4位分为一组,为9876|5432|1,然后折叠求和,9876+5432+1=15309。不需要知道关键字的分布,适合关键字较多的情况。
6)随机数法:f(key)=random(key),random为一个随机函数。通常用于关键字长度不等的情况。