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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 哈希算法与哈希冲突 -> 正文阅读

[数据结构与算法]哈希算法与哈希冲突

哈希算法

哈希算法为了是快速读写指定位置的数据,类似于字典索引的策略,通过哈希函数的计算,将某一指定的数据存储到指定的位置,为的是快速定位数据的存储位置。常见的哈希函数有:除法哈希算法、乘法哈希算法、平方取中法、随机数哈希算法。

除法哈希算法

计算方式:

h(x) = x % m

这里的x就是待存储数据的键值,m往往选择为存储空间的个数,直接取余计算存储位置。例如,我们在7个位置中存储3,11,8,6这几个数字

根据计算,3 % 7 = 3, 11 % 7 = 4, 8 % 7 = 1, 6 % 7 = 6

注意:m为了避免计算出现冲突,往往选择质数。

乘法哈希算法

计算方式:

这里的x是待存储数据的键值,m往往选择为存储空间的个数,先把x乘以一个大于0小于1的常数(小数)然后取结果的小数部分,乘以m后下取整。

例如m = 10, x = 8

注意:这种算法下,对m没有特别的要求,N常常取0.618

平方取中算法

计算方式:

h(x) = mid(x·x, n)

这里的x是待存储数据的键值,n表示取中间n位作为哈希值。

例如,123,234,245几个数进行平方取中法, 取平方值的千位和百位作为哈希值

随机数哈希算法

将待存储数据的键值作为随机函数的种子,计算随机数,作为哈希值。此类适用于长度不等,没有规则可言的键值。

哈希冲突

哈希函数是用来将数据和存储地址进行映射的方法,但是不可避免的是不同的数据映射到了相同的存储位置,这种情况下就称为出现了哈希冲突

开放定址法

开放定址法当出现哈希冲突时,进行连续的地址探测,直到找到空位置进行存储。

线性探查法

当出现哈希冲突时,从计算结果的位置开始依次向后探测,直到找到空位置。

h(key, i) = (key + i) % m, 0 <= i <= m-1

例如我们存储3,11,8,6,15,1. 哈希函数为h(x) = x % 7, 其中8和15和1的哈希值都是1

3,11,8,6依次存储到了3,4,1,6的位置,当15出现时,1的位置被8占用了,向后探查发现2的位置是空的,将其存储到2的位置。

1出现的时候,1,2,3,4均被占用,只能存储到5号位置。

二次探查法

当出现哈希冲突时,从计算结果的位置开始按平方次位置向后探测,直到找到空位置。

h(key, i) = (key + i·i) % m

依次探查key + 1, key + 4, key +9 ··· 的位置,找到空位置就进行存储

双重散列法

h(x, i) = (P(x) + i·Q(x)) % m

想要均匀的散列,Q(x) 的值要与m互质。

链地址法

链地址法通过哈希数组和链表组成,数组存储头指针,链表存储真实数据

这里也同样要求哈希函数选择的准确,否则容易导致退化,成了链表的顺序查询的问题。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:40:34  更:2022-04-24 09:43:09 
 
开发: 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/26 8:24:31-

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