处理散列冲突的方法
2012-12-19 16:22
239 查看
1. 开放定址法
开放定址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。
Hi = (H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列。di可有下列三种取法:
(1)di=1,2,3,…, m-1,称为线性探测再散列;
(2)di=1^2, -(1^2), 2^2, -(2^2), 3^2, …, ±(k^2),(k<=m/2),称二为次探测再散列;
(3)di=伪随机数序列,称为伪随机探测再散列。
所谓伪随机数,用同样的随机种子,将得到相同的数列。
2. 再散列函数法
Hi=RHi(key), i=1,2,…,k RHi均是不同的散列函数(比如除留余数、折叠、平方取中),在同义词产生地址冲突时就换用另一个散列函数计算散列地址,直到碰撞不再发生,这种方法不易产生“聚集”,但增加了计算时间。
3. 链地址法
将所有关键字为同义词的记录存储在一个单链表中,称这种表为同义词子表,在散列表中只存储所有同义词子表的头指针。
链地址法对于可能会造成很多冲突散列函数来说,提供了绝不会出现找不到地址的保障。但也就带来了查找时需要遍历单链表的性能损耗。
4. 公共溢出区法
为所有冲突的关键字记录建立一个公共的溢出区来存放。在查找时,对给定关键字通过散列函数计算出散列地址后,先与基本表的相应位置进行比对,如果相等,则查找成功;如果不相等,则到溢出表进行顺序查找。如果相对于基本表而言,在有冲突的数据很少的情况下,公共溢出区的结构对查找性能来说还是非常高的。
开放定址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。
Hi = (H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列。di可有下列三种取法:
(1)di=1,2,3,…, m-1,称为线性探测再散列;
(2)di=1^2, -(1^2), 2^2, -(2^2), 3^2, …, ±(k^2),(k<=m/2),称二为次探测再散列;
(3)di=伪随机数序列,称为伪随机探测再散列。
所谓伪随机数,用同样的随机种子,将得到相同的数列。
2. 再散列函数法
Hi=RHi(key), i=1,2,…,k RHi均是不同的散列函数(比如除留余数、折叠、平方取中),在同义词产生地址冲突时就换用另一个散列函数计算散列地址,直到碰撞不再发生,这种方法不易产生“聚集”,但增加了计算时间。
3. 链地址法
将所有关键字为同义词的记录存储在一个单链表中,称这种表为同义词子表,在散列表中只存储所有同义词子表的头指针。
链地址法对于可能会造成很多冲突散列函数来说,提供了绝不会出现找不到地址的保障。但也就带来了查找时需要遍历单链表的性能损耗。
4. 公共溢出区法
为所有冲突的关键字记录建立一个公共的溢出区来存放。在查找时,对给定关键字通过散列函数计算出散列地址后,先与基本表的相应位置进行比对,如果相等,则查找成功;如果不相等,则到溢出表进行顺序查找。如果相对于基本表而言,在有冲突的数据很少的情况下,公共溢出区的结构对查找性能来说还是非常高的。
相关文章推荐
- 处理散列冲突的方法 - 数据结构和算法85
- 处理哈希冲突的闭散列方法-线性探测
- 【数据结构】处理散列冲突的方法
- 哈希冲突的处理【闭散列方法-线性探测和二次探测】
- 处理散列冲突的方法
- 【数据结构】搜索中散列构造时冲突处理方法
- 散列表(三):冲突处理的方法之开地址法(线性探测再散列的实现)
- 散列表中冲突的处理方法(开放寻址法)
- 散列表(二)冲突处理的方法之链地址法的实现: 哈希查找
- 散列表(四):冲突处理的方法之开地址法(二次探测再散列的实现)
- 散列表(三):冲突处理的方法之开地址法(线性探测再散列的实现)
- 散列表(四):冲突处理的方法之开地址法(二次探测再散列的实现)
- 哈希冲突的处理【闭散列方法-线性探测和二次探测】
- 散列表(二):冲突处理的方法之链地址法的实现
- 散列函数之处理散列冲突方法
- 散列查找的查找插入及冲突处理方法
- 散列表(三)冲突处理的方法之开地址法: 线性探测再散列的实现
- 散列函数之处理散列冲突方法
- 散列技术-处理冲突的方法
- 6. 哈希。哈希函数的有哪些种? 处理冲突的方法? 闭散列方法有哪些?