数据结构——五十一、散列表的基本概念(王道408)

文章目录

前言

本文介绍了散列表(哈希表)的基本概念和工作原理。散列表通过散列函数(如H(key)=key%13)将关键字映射到存储地址,实现快速查找(理想情况下时间复杂度O(1))。文章重点讨论了冲突(不同关键字映射到同一地址)及其解决方法:拉链法(用链表存储同义词)和开放定址法(寻找其他空闲位置)。最后总结了散列表的核心考点,包括散列函数设计、冲突处理策略等。散列表作为一种高效的数据结构,在理想情况下能实现常数级查找性能,但需要合理处理冲突问题。

一.散列表、散列函数的基本概念

1.基本概念

  • 散列表(哈希表,Hash Table) :是一种数据结构。特点是:可以根据数据元素的关键字计算出它在散列表中的存储地址
  • 散列函数(哈希函数):Addr=H(key)建立了"关键字"→"存储地址"的映射关系。

2.具体例子

  • 例:某散列表的长度为13,散列函数H(key)=key%13。依次将数据元素19、14、23插入散列表:

    • 散列表配套的散列函数是H(key)=key%13,用这样的方式去计算出一个数据元素,在散列表当中存储的地址
    1. 把元素19代入这个散列函数得到结果6,数据元素19应该存储在下标为6的位置
    2. 接下来也是一样的操作,不做赘述

3.优势

  • 理想情况下,在散列表中查找一个元素的时间复杂度为O(1)。
  • 比如:
    1. 假设查找19是否存在,那么首先我们要计算19应该存储位置,那根据散列函数可以知道19对13取余等于6
    2. 因此如果19这个数据元素存在的话,那么它应该是在6这个位置,所以我们可以直接查找散列表当中,发现这个元素的值刚好就是19,查找成功
    3. 再比如我们要查找数据元素16,那么16对13取余等于3,所以我们应该检查下标为3的位置,但是下标为3的这个位置并没有存储任何一个数据元素,因此16这个元素在散列表当中是不存在的

二.冲突、同义词的概念

1.基本概念

  • 冲突(碰撞):在散列表中插入一个数据元素时,需要根据关键字的值确定其存储地址,若该地址已经存储了其他元素,则称这种情况为"冲突(碰撞)"
  • 同义词:若不同的关键字通过散列函数映射到同一个存储地址,则称它们为"同义词"

2.举例理解

  • 插入关键字1
    1. 1 % 13 = 1
    2. 但是现在这个位置已经存储了14这个元素,这就叫冲突
    3. 此时将1和14称为同义词

三.如何减少"冲突"

  1. 构造更适合的散列函数,让各个关键字尽可能地映射到不同的存储位置,从而减少"冲突"

四.若"冲突"无可避免,如何处理冲突?

1.拉链法的思路

  • 拉链法(又称链接法、链地址法):把所有"同义词"存储在一个链表中

2.开放定值法思路

  • 开放定址法:如果发生"冲突",就给新元素找另一个空闲位置。

待解决的问题:用什么规则确定"另一个空闲位置"?

五.知识回顾与重要考点

结语

七更😉
如果想查看更多章节,请点击:一、数据结构专栏导航页

相关推荐
杨福瑞2 小时前
数据结构:双向链表(3)
c语言·数据结构·链表
Coovally AI模型快速验证2 小时前
去噪扩散模型,根本不去噪?何恺明新论文回归「去噪」本质
人工智能·深度学习·算法·机器学习·计算机视觉·数据挖掘·回归
歌_顿2 小时前
attention、transform、bert 复习总结 1
人工智能·算法
MicroTech20253 小时前
MLGO微算法科技时空卷积与双重注意机制驱动的脑信号多任务分类算法
科技·算法·分类
txp玩Linux3 小时前
rk3568上解析webrtc音频降噪算法处理流程
算法·音视频·webrtc
立志成为大牛的小牛3 小时前
数据结构——五十二、散列函数的构造(王道408)
数据结构·笔记·程序人生·考研·算法
机灵猫3 小时前
java锁:从 Mark Word 锁升级到 AQS
java·开发语言
AAA阿giao4 小时前
大厂面试之反转字符串:深入解析与实战演练
前端·javascript·数据结构·面试·职场和发展·编程技巧
希望有朝一日能如愿以偿4 小时前
力扣每日一题:可被三整除的最大和
数据结构·算法·leetcode