散列·布谷鸟散列

编程入门 行业动态 更新时间:2024-10-20 09:20:38

散列·<a href=https://www.elefans.com/category/jswz/34/1740382.html style=布谷鸟散列"/>

散列·布谷鸟散列

布谷鸟散列

1、定义

1.1 描述

​ 假设有N个项,我们维护两个分别超过半空的表,且有独立的散列函数,可以把每个项分配到每个表中的一个位置,布谷鸟散列保持不变的是一个项总是会被存储在这两个位置之一。

  • 维护2个超过半空的散列表

  • 每个表有独立的散列函数

  • 每个项都在2个表中有对应位置

    1.2 图解

    图解

  • 图解说明

    ​ 我们的初始状态为2张表,分别由2个散列函数维护,现在我们有ABCDEF 共6个元素,每个元素在2张表中均有散列位置(例如A在表1中的散列位置为0,在表2中的散列位置为2),开始插入

    1. 图1:插入A,先寻找在表1点散列位置0,插入到位置0;

    2. 图2:插入B,先寻找在表1点散列位置0,插入到位置0,但是位置0已经有A存在,后插入优先原则,B将A从表1点位置0挤走,A进入备选位置,插入表2点位置2;

    3. 图3:插入C,在表1点位置1插入C,没有冲突;

    4. 图4:插入D,在表1的位置为1,产生冲突,将C挤走,C插入表2位置4;

      ​ 插入E,在表1点位置3;

    5. 图5:插入F,在表1点位置3,产生冲突,将E挤走;

    6. 图6:E被挤到表2位置2,产生冲突,将A挤走;

    7. 图7:A被挤到表1位置0,产生冲突,将B挤走;

    8. 图8:B被挤到表2位置0,没有冲突,最终状态确定。

2、循环

​ 在上述图解中,我们看到在进行元素插入时,我们总是优先插入当前插入的元素,若产生冲突,则将原位置的元素挤走,如此类推,知道所有元素没有冲突的插入。但是,这种模式有个很明显的问题,就是如果散列值不好,则很容易发生循环,即插入导致永远的在挤走冲突元素,永远都在冲突状态。例如:在上述图解中插入G(1,2)。就会产生循环。

2.1 循环概率

​ 有研究表明,如果表的装填因子小于0.5,循环的概率非常低

3、扩展

​ 如果在2张表的基础上,建立更多的表用来散列,比如3表分散,4表分散。虽然这样做增加了查找的开销,但也大幅度增加了空间的利用。因为每张表都会很小。

4、优势

​ 布谷鸟散列的优势:

  1. 最坏情况下常数级的查找和删除时间。
  2. 避免了懒惰删除和额外的数据以及并行化的可能性。

5、代码实现

.java

更多推荐

散列·布谷鸟散列

本文发布于:2024-02-12 05:31:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1686326.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:布谷鸟

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!