Hash表
定义:
1.Hash函数:建立数据元素的存放位置和数据元素的关键字之间的映射关系而建立的Hash函数。
2.Hash表:是通过哈希函数来确定数据元素存放位置的一种特殊表结构。
常见Hash函数构造方法:
目标:
1.使通过Hash函数得到的n个数据元素的哈希地址尽可能均匀地分布在m个连续内存单元上。
2.使计算过程尽可能的简单以达到尽可能高的时间效率。
常用的整数类型关键字的Hash函数构造方法:
1.除留余数法:
除留余数法是用数据元素关键字k除以哈希表长度m所得到的余数作为哈希地址的方法。除留余数法的哈希函数h(k)为:h(K)= k mod m。这种方法的关键是选好哈希表长度m,使得数据元素集合中的每一个关键字通过该哈希函数映射到m个内存单元的任意地址上的概率相等,从而尽可能减少发生哈希冲突的可能性。
理论研究表明:除留余数法的hash表长度m取素数时效果最好。素数是除了1和该数自身外,不能被任何整数整除的数。
2.直接定址法:
直接定址法是以数据元素关键字k本身或关键字加上某个数值常量C作为哈希地址的方法。直接定址法的哈希函数h(k)为:
h(K) = K + C;
3.数字分析法:
设用于所有关键字值已知的情况。数据分析法是取数据元素关键字中某些取值教均匀的数字位作为哈希地址的方法。
哈希冲突解决办法
1.开放定址法
开放定址法是一类以发生Hash冲突的哈希地址为自变量,通过某种哈希冲突函数得到一个新的空闲的内存单元地址的方法。开放定址法的哈希函数通常是一组。