参考书籍:《大话数据结构》
1. 开放定址法:一旦发生冲突,就去寻找下一个空的散列地址。
只要列表足够大,空的散列地址总能找到,并将记录存入。
线性探测法:当使用线性探测法进时,会吹按不是同义词却需要争夺一个地址的情况,这种现象是堆积。
二次探测法:增加平方运算为了不让关键字都聚集在某一块区域,解决堆积问题。
随机探测法:在冲突时,对于位移量di采用随机函数计算得到。注意这里的随机其实是伪随机,根据随机种子得到
2. 再散列函数法:在冲突时,换用一个散列函数计算。
这种方法使得关键字不产生聚集,但同时增加了计算时间。
3. 链地址法:将所有关键字为同义词的记录存储在一个单链表中,在三列表中只存储所有同义词子表的头指针。
链地址法对于可能会造成很多冲突的散列函数来说,提供了绝不会出现找不到地址的保障,但也带来了查找时需要遍历单链表的性能损耗。
4. 公共溢出区法:为所有冲突的关键字建立一个公共的溢出区来存放。
在查找时,对给定值通过散列函数计算出散列地址后,咸鱼基本表的相应位置进行对比,如果想等则查找成功;如果不能,则到溢出表进行顺序查找。
#################################################
哈希函数的构造方法
1. 直接定址法:取关键字的某个线性函数作为散列地址
需要事先知道关键字的分布情况,适合查找表小且连续的情况
2. 数字分析法
3. 平方取中法
4. 除留余数法:
最常用的哈希函数构造方法,不仅可以直接mod,也可以平方取中、折叠后在mod
5. 随机数法