第5天:散列HASH(二)冲突解决办法之线性再散列法
来源:互联网 发布:广电怎么看网络电视 编辑:程序博客网 时间:2024/05/20 14:44
冲突解决办法
除了可以设计出完美散列函数的情况之外,散列表必须具备合理地处理冲突的能力。当散列表给两个不同的数据项提供相同的散列值时,就会发生冲突。解决冲突广泛采用以下三种方法:(1)线性再散列法, 简单地按顺序遍历散列表,寻找下一个可用的存储位置;(2)非线性再散列法, 计算一个新的散列值;(3)外部拉链法,将散列表中的每个位置市委具有相同散列值的数据项的链表的同步,散列表将发送冲突的项添加到该链表中。
线性再散列法
线性再散列法是形式最简单的冲突解决方法。刚一发现冲突,算法就会简单的从冲突位置开始遍历散列表,直到表中的下一个空槽,并将元素放入该槽中。此后,任何查找元素的操作都开始于散列值所指向的表槽。如果没有找到匹配,则将继续遍历散列表,直到:(1)找到相应的元素;(2)找到一个空槽(指示查找的元素不存在);(3)检查整个散列表(指示该元素不存在并且散列表是满的)。
在遍历散列表的时候,可以每隔几个槽检查一个槽,当到达表尾时绕回表头继续查找。只要表的大小和检查槽的步长是互质的(即它们没有公约数),那么表中的每个槽都会被检查。步长为1是不可取的,因为这将促使聚集产生。如果在表的同一普通区域发生了少数冲突,步长为1就意味着:表的这个部分将很快填满大量重复的内容,此时表的该区域中的任何活动都将涉及更大的步长。以5或更大的值作为步长,可以迅速的将查找从拥挤区域移开,并减小产生严重聚集的机会。
缺点:不能从表中删除元素,并且当表被填满时性能下降明显。如果执行简单的删除操作则会出现第三幅图的情况,删除后当需要查找“Elephant”时,会在找到之前遇到刚刚删除产生的空槽,从而出现找不到“Elephant”元素的问题。因此只有把使用过的槽标记为无效的才可以执行删除。在查找时如果遇到无效的槽,就可以简单的继续执行查找。
- 第5天:散列HASH(二)冲突解决办法之线性再散列法
- 第6天:散列HASH(三)冲突解决办法之非线性再散列法
- 第7天:散列HASH(四)冲突解决办法之外部拉链法
- hash冲突之线性探测
- Hash解决冲突之线性探测
- 散列函数之冲突处理(二)
- 第4天:散列HASH(一)
- 第8天:散列HASH(五)性能
- hash散列表链表冲突
- Hash冲突解决办法
- hash冲突解决办法
- 线性在散列解决散列冲突
- 散列(hash)
- 散列(hash)
- 建立Hash表(散列表)(运用线性探测法解决冲突)
- Hash散列算法详细解析(二)
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
- Hash函数及冲突解决办法
- MySQL性能优化的最佳20+条经验
- Merge Sorted Array
- 1034 forest
- JAVA的Random类(转)
- 比较器报错:Comparison method violates its general contract
- 第5天:散列HASH(二)冲突解决办法之线性再散列法
- ubuntu 连不到外网
- OpenCV247 鼠标选择ROI区域
- 第几天?
- 程序员,在大场面也要hold住
- 编程思想与编程技法是相互影响的两件事,然而也是不可拆分的一回事儿!
- jquery中,html、val与text三者属性取值的联系与区别
- 外部归并排序(1)——通道映射方法的文件读写
- 实例化与实现