news 2026/10/5 12:47:25

使用链地址法(拉链法)解决哈希冲突时,每个哈希地址对应一个链表,所有哈希到该地址的关键字按链表形式存储

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用链地址法(拉链法)解决哈希冲突时,每个哈希地址对应一个链表,所有哈希到该地址的关键字按链表形式存储

使用链地址法(拉链法)解决哈希冲突时,每个哈希地址对应一个链表,所有哈希到该地址的关键字按链表形式存储。下面以题目给出的参数进行详细构造和分析。


1. 链地址法构造哈希表

  • 哈希表长度:11(地址从 0 到 10)
  • 哈希函数:H(key) = key mod 11
  • 关键字序列:47, 34, 13, 12, 52, 38, 33, 27, 3

逐个计算哈希地址并插入:

keyH(key) = key mod 11插入位置(链表)
4747 mod 11 = 3地址 3
3434 mod 11 = 1地址 1
1313 mod 11 = 2地址 2
1212 mod 11 = 1地址 1 → 冲突,链入 34 后
5252 mod 11 = 8地址 8
3838 mod 11 = 5地址 5
3333 mod 11 = 0地址 0
2727 mod 11 = 5地址 5 → 冲突,链入 38 后
33 mod 11 = 3地址 3 → 冲突,链入 47 后

最终哈希表结构如下(链表顺序为插入顺序):

地址 0: [33] 地址 1: [34] → [12] 地址 2: [13] 地址 3: [47] → [3] 地址 4: 空 地址 5: [38] → [27] 地址 6: 空 地址 7: 空 地址 8: [52] 地址 9: 空 地址10: 空

2. 成功查找的平均查找长度(ASL)

成功查找:对每个元素查找时,需比较的次数等于其在链表中的位置(从头开始比较)。

  • 地址 0: 33 → 1 次比较
  • 地址 1: 34(第1个)→ 1 次,12(第2个)→ 2 次
  • 地址 2: 13 → 1 次
  • 地址 3: 47(第1个)→ 1 次,3(第2个)→ 2 次
  • 地址 5: 38(第1个)→ 1 次,27(第2个)→ 2 次
  • 地址 8: 52 → 1 次

统计:

  • 1 次比较的元素:33, 34, 13, 47, 38, 52 → 共 6 个
  • 2 次比较的元素:12, 27, 3 → 共 3 个

总比较次数 = 6×1 + 3×2 = 6 + 6 = 12
元素总数 = 9

因此,
ASL = 12 / 9 ≈1.33

注:原题中写 ASL ≈ 1.34 可能是四舍五入误差,正确值为 1.33(即 4/3)


3. 其他哈希冲突解决方法

  • 再哈希法(双重哈希)
    冲突时使用另一个哈希函数重新计算地址,如H_i = (H1(key) + i×H2(key)) mod table_size,直到找到空位。
    ✅ 优点:减少聚集现象(尤其是线性探测导致的“堆积”)
    ❌ 缺点:计算开销大,需多个哈希函数

  • 公共溢出区法
    设主表和一个溢出表(如数组或链表),主表存放无冲突元素,冲突元素统一放入溢出区。
    查找时先查主表,若冲突则查溢出区。
    ✅ 优点:结构清晰,便于管理
    ❌ 缺点:溢出区可能变慢,查找效率下降


4. 哈希表的查找特点

  • 必须使用与插入时相同的哈希函数和冲突处理策略来定位地址。
  • 实际查找过程中仍需进行关键字比较(因为哈希值相同不一定关键字相同)。
  • 查找效率用平均查找长度(ASL)衡量。
  • 影响因素:
    • 哈希函数的好坏(是否均匀分布)
    • 冲突处理方法(链地址 vs 开放寻址)
    • 装填因子 α = 元素个数 / 表长(α 越小,冲突越少,性能越好)

使用开放地址法中的线性探测(Linear Probing)处理哈希冲突时,当发生冲突,会顺序向后查找下一个空闲位置,直到找到空槽为止。其基本公式为:

H_i(key) = (H(key) + i) mod m
其中:

  • H(key) = key mod m是初始哈希值
  • i = 0, 1, 2, ..., m-1是探测次数
  • m是哈希表长度(本例中为 11)

📌 参数回顾:

  • 哈希表长度:11(地址 0 ~ 10)
  • 哈希函数:H(key) = key mod 11
  • 关键字序列:47, 34, 13, 12, 52, 38, 33, 27, 3

我们逐个插入,并在线性探测下解决冲突。


🔧 插入过程详解:

keyH(key)探测过程最终位置说明
4747 mod 11 = 3地址 3 空 → 插入3成功
3434 mod 11 = 1地址 1 空 → 插入1成功
1313 mod 11 = 2地址 2 空 → 插入2成功
1212 mod 11 = 1地址 1 已被占 → 检查 2 → 被占 → 检查 3 → 被占 → 检查 44探测 i=3: (1+3)=4,空,插入
5252 mod 11 = 8地址 8 空 → 插入8成功
3838 mod 11 = 5地址 5 空 → 插入5成功
3333 mod 11 = 0地址 0 空 → 插入0成功
2727 mod 11 = 5地址 5 占 → 6 空?是 → 插入6探测 i=1: (5+1)=6
33 mod 11 = 3地址 3 占 → 4 占(12)→ 5 占 → 6 占(27)→ 7 空 → 插入7探测 i=4: (3+4)=7

✅ 构造完成后的哈希表(索引 0~10):

地址012345678910
内容33341347123827352空空

📊 成功查找的平均查找长度(ASL)

每次查找从初始地址开始探测,直到找到目标元素,比较次数 = 探测次数 + 1(每探一次算一次比较)

key初始地址实际位置探测步数(i)比较次数
473301
341101
132201
1214从1→2→3→4,第3步成功4(检查1,2,3,4)
528801
385501
330001
2756第1次探测成功(5→6)2
337从3→4→5→6→7,共4步5

注意:线性探测中,“比较次数”是指在查找路径上逐个比对关键字的次数。

总比较次数 = 1+1+1+4+1+1+1+2+5 =17
元素个数 = 9

👉 ASL = 17 / 9 ≈1.89


⚠️ 特点与问题

  • 优点:实现简单,缓存友好(连续访问内存)
  • 缺点:
    • 容易产生“聚集现象”(如地址1~4连续被占,形成“主集团”)
    • 插入和查找效率随装填因子升高急剧下降
    • 删除操作复杂(不能直接清空,需标记为“已删除”)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 4:27:08

C#调用HunyuanOCR接口示例代码分享(基于HttpClient)

C# 调用 HunyuanOCR 接口实战:轻量大模型与企业应用的高效集成 在银行柜台,一名柜员将一张身份证放在扫描仪上,不到三秒,姓名、性别、身份证号等信息已自动填入业务系统;在医院档案室,上千份手写病历正被高…

作者头像 李华
网站建设 2026/10/6 4:27:06

Dify可视化编排调用HunyuanOCR API实现合同识别机器人

Dify可视化编排调用HunyuanOCR API实现合同识别机器人 在企业日常运营中,每天都有成百上千份合同、发票、证件等待处理。传统方式依赖人工逐字录入,效率低、易出错,尤其当文档格式多样、语言混杂时,更是苦不堪言。有没有一种方法&…

作者头像 李华
网站建设 2026/10/6 4:27:07

计算机毕业设计springboot玩具公司进销存管理系统 计算机毕业设计springboot玩具公司进销存管理系统 SpringBoot框架下的玩具公司库存、采购及销售一体化管理系统

计算机毕业设计springboot玩具公司进销存管理系统4bas39 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展,传统玩具公司的进销存管理方式面临着…

作者头像 李华
网站建设 2026/10/5 0:35:27

C++游戏引擎热更新机制实现(支持动态扩展的底层原理剖析)

第一章:C游戏引擎热更新机制的核心概念在现代C游戏引擎开发中,热更新机制是实现不停机修复逻辑、迭代功能的关键技术。它允许开发者在程序运行期间动态替换或修改代码逻辑,而无需重启整个应用,极大提升了线上服务的稳定性和开发效…

作者头像 李华
网站建设 2026/10/5 7:45:05

MyBatisPlus整合Spring Boot管理HunyuanOCR任务记录

MyBatisPlus整合Spring Boot管理HunyuanOCR任务记录 在企业级AI应用落地的过程中,一个常被忽视但至关重要的环节是:如何让每一次模型推理都“有迹可循”。尤其是在OCR这类高频、异步、结果敏感的场景中,如果系统无法追踪任务状态、无法回溯失…

作者头像 李华
网站建设 2026/10/2 18:41:16

FastStone Capture注册码失效?不如试试HunyuanOCR做截图识别

HunyuanOCR:当截图识别遇上大模型,告别注册码困扰 在日常办公中,你是否也经历过这样的瞬间:正准备用熟悉的截图工具提取一段文档内容,却发现软件突然弹出“注册码无效”或“试用期已过”的提示?FastStone C…

作者头像 李华