IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 408-数据结构-哈希表 -> 正文阅读

[数据结构与算法]408-数据结构-哈希表

哈希表是数据结构,特点是关键字与存储地址存在某种映射关系,通常关系由哈希函数表示addr = f(key)。

哈希表存在数据多于存储地址的情况。所以哈希函数在地址视角下是一对多的关系。也就是多个关键字可能对应着同一个存储地址。那么可能会产生冲突,也就是映射点已经存放了数据。

构造哈希表需要构造哈希函数,如果哈希函素构造好,可能会使得每一个数据都在哈希表中直接占据映射位置,也就是呈现出通过哈希函数的到地址直接就是数据。那么这样可以使得查找在O(1)复杂度下。如果产生冲突,就需要构建一定机制存放冲突数据,那么查找时间也会收到影响,所以构造哈希函数的目标是尽可能减少冲突的可能。

常见哈希函数:

  1. 除留余数法
    就是f(key) = key%m。这里m通常取不大于表长的最大质数,这么做优点是可能减少冲突,因为如果是合数,在特殊数据情况下,这些数据都会映射到相同的值,例如m取8,数据都是2的倍数,但素数不会出现这种情况。缺点就是有一部分的哈希表完全就是浪费空间。
  2. 直接定址法
    也就是线性方式 f(key) = a * key + b。
  3. 平方取中法
    通常是取某几位然后平方来进行映射,因为关键字可能在某几位分布较为聚集,在某几位分布较为均匀。那么就取均匀几位再平方能够降低冲突可能。

处理冲突的方式:

  1. 拉链法
  2. 开放地址法

拉链法也就是将哈希表每一个单元作为一个链表头,同义词存储在相同链表下。计算查找长度通常计算比较关键字的次数,在链表判断那里通常不加入考虑。失败的ASL = 装填因子。也就是表中的记录数/哈希表长度。

开放地址法指的是空闲地址允许存储非同义词表项,也就是非空闲地址存储的不一定是哈希映射来的关键字。
通常通式可以表示为
H i = ( H ( k e y ) + d i ) m o d m H_i = (H(key)+d_i) mod m Hi?=(H(key)+di?)modm
m表示表长。其中di针对不同方案取不同序列,通常有三种方式,线性探测法,平方探测法,伪随机序列法。

线性探测法 di = 0, 1, 2, 3 …
也就是在插入时候,如果发生冲突,就一直往右边走,如果碰壁从头继续,直到没有空闲地址为止。
查找时候,进行映射之后,就需要一直往右查找,直到遇到空闲块为止。空空闲块的判断也要算作一次比较关键词次数
删除需要注意,开放地址法不能直接将需要删除结点置空,因为查找算法是遇到空闲块为止,如果右侧还有同义词,置空该项会使得右侧同义词查找不到。所以只能假删除假置空。

平方探测法 di = 0, 12, -12,22,-22
其余类似。

伪随机数就是生成一个伪随机序列di。不是重点。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:07:37  更:2022-08-06 11:10:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:25:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码