哈希冲突的解决办法

本文深入探讨了哈希表中处理冲突的两种常见方法:开放寻址法(包括线性探测和平方探测)和拉链法。线性探测法通过顺序查找下一个空槽插入元素,而平方探测法则遵循平方序列来避免聚集。拉链法则是将哈希值相同的元素链接成链表,提高了查找效率。通过实例展示了这些方法的运用,并分析了其优缺点。
摘要由CSDN通过智能技术生成

哈希冲突的解决办法

  • 处理冲突

    为产生冲突的地址寻找下一个哈希地址。

  • 解决办法
    • 开放寻址法
      • 线性探测法
      • 平方探测法
    • 拉链方法(链地址法)

  • 线性探测法
    • 使用数组来存储哈希表,可设置标志来判断该位置是否为空。

    • 存放时,如果哈希计算结果冲突,将新的表项放在下个空闲的存储单元。

      if (Hashtable[j].data == -1)
      	{Hashtable[j].data = key;}
      else
      	{key++;
          j = hash(key);}
      
    • 检索时,发现当前 hash 地址里存放的不是需要的元素,就从下一个存储单元开始逐个探查。

      if (Hashtable[j].data != -1 && Hashtable[j].data != key)
      	{key++
          j = hash(key);}
      

    示例:

    表长为11的哈希表中已填有关键字为 176029 的记录, H(key)=key MOD 11; 现有第 4 个记录,关键字为 38, 按线性探测法处理冲突的方法,将它填入。

  • 平方探测法

    从发生冲突的地址 d 开始,得到一个探查序列:d, d+1^2, d-1^2, d+2^2, d-2^2, d+3^2, d-3^2,·······

    示例:

    关键字集为 {47, 7, 29 , 11, 16, 92, 22, 8},哈希表表长为 11,Hash(key)=key MOD 11,用二次探测法填入 3

在这里插入图片描述

  • 拉链方法(链地址法)

    将 hash 值相同的表项,使用链表链在一起。比如:

在这里插入图片描述

示例:

已知一组关键字 (19, 14, 23, 1, 68, 20, 84, 27, 55, 11, 10, 79),哈希函数为:H(key) = key MOD 13,设每个记录的查找概率相等,求平均查找长度。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值