Hash冲突:
理解Hash冲突前,先了解一下Hash函数
哈希函数
数据元素的存储地址,是根据数据的关键字K通过一定的函数关系计算得出,这个函数关系即称哈希函数。
Hash冲突就是,不同的数据元素关键字K,计算出的哈希值相同,此时两个或多个数据,对应同一个存储地址,即产生冲突。
Hash冲突解决办法:
- 开放定址法
- 再哈希法
- 链地址法
- 建立公共溢出区
开放定址法
使用某种探测算法在散列表中寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到。按照探测序列的方法,一般将开放地址法区分为线性探查法(顺序的查看下一个单元)、二次探查法(在表的左右进行跳跃式探测)、双重散列法(双哈希函数,先用第一个函数 f(key) 对关键码计算哈希地址,一旦产生地址冲突,再用第二个函数 g(key) 确定移动的步长因子,最后通过步长因子序列由探测函数寻找空的哈希地址)、伪随机探测再散列建立一个伪随机数发生器,并给一个随机数作为起点()等。
** 再哈希法**
这种方式是同时构造多个哈希函数,当产生冲突时,计算另一个哈希函数的值。
这种方法不易产生聚集,但增加了计算时间。
链地址法
将所有哈希地址相同的都链接在同一个链表中 ,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。<