Hash 专题

news2024/9/20 10:56:00

一、散列表

根据 key 计算 key 在表中的位置的数据结构;是 key 和其所在 存储地址的映射关系;

注意:散列表的节点中 kv 是存储在一起的;

结构:

二、选择hash的原因

1、需要很强的查找效率

2、强随机分布,等概率、均匀的分布在整个地址空间。

常用的哈希算法:

murmurhash1,murmurhash2,murmurhash3,siphash ( redis6.0 当中使用,rust 等大多数语言选用的 hash 算法来实 现 hashmap),cityhash 都具备强随机分布性;siphash 主要解决字符串接近的强随机分布性 ;

三、负载因子

数组存储元素的个数 / 数组长度;用来形容散列表的存储密 度;负载因子越小,冲突概率越小,负载因子越大,冲突概率越 大;

四、hash 冲突处理

1、链表法(拉链法)

引用链表来处理哈希冲突;也就是将冲突元素用链表链接起 来;这也是常用的处理冲突的方式;但是可能出现一种极端情 况,冲突元素比较多,该冲突链表过长,这个时候可以将这个 链表转换为红黑树、最小堆;由原来链表时间复杂度 转 换为红黑树时间复杂度 ;

2、开放寻址法

将所有的元素都存放在哈希表的数组中,不使用额外的数据结 构;一般使用线性探查的思路解决; 1. 当插入新元素的时,使用哈希函数在哈希表中定位元素位 置; 2. 检查数组中该槽位索引是否存在元素。如果该槽位为空,则 插入,否则3; 3. 在 2 检测的槽位索引上加一定步长接着检查2; 加一定步长 分为以下几种: i+1,i+2,i+3,i+4, ... ,i+n i- ,i+ ,i- ,1+ , ... 这两种都会导致同类 hash 聚 集;也就是近似值它的hash值也近似,那么它的数组槽 位也靠近,形成 hash 聚集;第一种同类聚集冲突在前, 第二种只是将聚集冲突延后; 另外还可以使用双重哈希 来解决上面出现hash聚集现象:

在.net HashTable类的hash函数Hk定义如下:
Hk(key) = [GetHash(key) + k * (1 + 
(((GetHash(key) >> 5) + 1) %
(hashsize – 1)))] % hashsize
在此 (1 + (((GetHash(key) >> 5) + 1) % 
(hashsize – 1))) 与 hashsize
互为素数(两数互为素数表示两者没有共同的质因⼦);
执⾏了 hashsize 次探查后,哈希表中的每⼀个位置都有
且只有⼀次被访问到,也就是
说,对于给定的 key,对哈希表中的同⼀位置不会同时使⽤ 
Hi 和 Hj;

五、布隆过滤器

1、背景

布隆过滤器是一种概率型数据结构,它的特点是高效地插入和 查询,能确定某个字符串一定不存在或者可能存在; 布隆过滤器不存储具体数据,所以占用空间小,查询结果存在 误差,但是误差可控,同时不支持删除操作;

2、构成

位图(BIT 数组)+ n 个 hash 函数

m % 2^n = m & (2^n  - 1)

3、原理

当一个元素加入位图时,通过 k 个 hash 函数将这个元素映射到 位图的 k 个点,并把它们置为 1;当检索时,再通过 k 个 hash 函数运算检测位图的 k 个点是否都为 1;如果有不为 1 的点,那 么认为该 key 不存在;如果全部为 1,则可能存在;

为什么不支持删除操作?

1、在位图中每个槽位只有两种状态(0 或者 1),一个槽位被 设置为 1 状态,但不确定它被设置了多少次;也就是不知道 被多少个 key 哈希映射而来以及是被具体哪个 hash 函数映 射而来;

2、不存在只要一个索引位为0;如果都为1,是否一定存在? 不一定,可控的(假阳率)

4、应用场景

布隆过滤器通常用于判断某个 key 一定不存在的场景,同时允 许判断存在时有误差的情况;

常见处理场景:① 缓存穿透的解决;② 热 key 限流;

描述缓存场景,为了减轻数据库(mysql)的访问压力,在 server 端与数据库(mysql)之间加入缓存用来存储热点数据;

描述缓存穿透,server端请求数据时,缓存和数据库都不包含该 数据,最终请求压力全部涌向数据库;

数据请求步骤,如图中 2 所示;

发生原因:黑客利用漏洞伪造数据攻击或者内部业务 bug 造成 大量重复请求不存在的数据;

解决方案:如图中 3 所示;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2135770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络:概述 - 计算机网络概述

目录 一. 互联网概述 1.1 网络 1.2 互联网 1.3 因特网 二. 互联网发展的三个阶段 三. 互联网的标准化工作 四. 互联网的组成 五. 计算机网络的类别 5.1 计算机网络的定义 5.2 计算机网络的不同类别 一. 互联网概述 起源于美国的互联网现如今已…

前端必知必会-响应式网页设计之媒体查询

文章目录 响应式网页设计 - 媒体查询什么是媒体查询?添加断点始终以移动设备为先进行设计另一个断点典型的设备断点方向:纵向/横向使用媒体查询隐藏元素使用媒体查询更改字体大小 总结 响应式网页设计 - 媒体查询 什么是媒体查询? 媒体查询…

动态规划前---选----

前言&#xff1a;基本的算法思路还是先看数据范围&#xff0c;接着看能不能用动态规划来做&#xff0c;刚刚好这个题目可以套用前—选— 题目地址 #include<bits/stdc.h> using namespace std;#define int long long int n,m; const int N (int)305; int dp[N][N]; // 前…

中国电子学会202406青少年软件编程(Python)等级考试试卷(四级)真题与解析

一、单选题(共25题, 共50分) 1.执行以下程序后所输出的结果是?( ) A 20 B 41 C 21 D 91 2.以下说法错误的是?( ) A python中可以在不同的自定义函数中声明相同名字的变量,使用时不会造成数据混乱 B 形参在其自定义函数内不能与其它变量重名 C …

初一信息科技2024指南辅助教学软件(抓包软件)

专门针对信息科技20204指南写的程序&#xff0c;互联网和直播等知识中包含tcp/ip和udp&#xff0c;三次握手等原理&#xff0c;需要简单明了的实验来说明&#xff0c;在机房中需要用抓包软件&#xff0c;可能需要安装windump npcap等软件非常繁琐&#xff0c;还需要接触保护卡&…

Leetcode 寻找重复数

可以使用 位运算 来解决这道题目。使用位运算的一个核心思想是基于数字的二进制表示&#xff0c;统计每一位上 1 的出现次数&#xff0c;并与期望的出现次数做比较。通过这种方法&#xff0c;可以推断出哪个数字重复。 class Solution { public:int findDuplicate(vector<i…

如何写出高效的软件测试用例?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 编写测试用例的目的就是确保测试过程全面高效、有据可查。但要编写出高效的测试用例&#xff0c;需要搞清楚什么是测试用例&#xff0c;以及如何编写出高效的测试用…

Go第三方框架--gin框架(三)

5. net/http框架源码-- 多路复用的实现 这块核心功能对应 1.3 的圆圈2&#xff0c;所属代码如下图&#xff1a; run代码涉及的操作不是gin框架的核心&#xff0c;还记的我说过gin是在net/http的基础上操作的吗&#xff0c;我们来看下gin和net/http包的关联关系。 gin: 主要建…

SurfaceTexture OnFrameAvailableListener 调用流程分析

背景: 最近项目中遇到一个问题, 需要搞清楚OnFrameAvailableListener 回调流程, 本文借此机会做个记录, 巩固印象, 有相关困惑的同学也可以参考下. 本文基于Android 14 framework 源码进行分析 SurfaceTexture.java OnFrameAvailableListener 设置过程 public void setOnFra…

102.游戏安全项目-显示人物属性

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;101.游戏安全项目-创建人物对象结构 效果图&#xff1a; 以 101.游戏安全项目-创建人物…

[产品管理-15]:NPDP新产品开发 - 13 - 产品创新流程 - 具体产品的创新流程:精益生产与敏捷开发

目录 前言&#xff1a;​ 一、集成产品开发IPD模型——集成跨功能团队的产品开发 1.1 概述 1、IPD模型的核心思想 2、IPD模型的主要组成部分 3、IPD模型的实施步骤 4、IPD模型的优点 1.2 基于IPD系统的组织实践等级 1.3 IPD的优缺点 二、瀑布开发模型 1、定义与特点…

【一分钟学C++】std::memory_order

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 公众号&#xff1a; C学习与探索 | 个人主页&#xff1a; rainInSunny | 个人专栏&#xff1a; Learn OpenGL In Qt 文章目录 写在前面为什么需要Memory OrderMemory OrderRelaxed OrderRelease-Acquire Order 写在前面 使用std::mem…

day45-测试平台搭建之前端vue学习-基础4

目录 一、生命周期 1.1.概念 1.2.常用的生命周期钩子 1.3.关于销毁Vue实例 1.4.原理​编辑 1.5.代码 二、非单文件组件 2.1.组件 2.2.使用组件的三大步骤 2.3.注意点 2.4.关于VueComponent 2.5.一个重要的内置关系 三、今日学习思维导图 一、生命周期 1.1.概念 1).又名&…

每日OJ_牛客_点击消除(栈)

目录 牛客_点击消除&#xff08;栈&#xff09; 解析代码 牛客_点击消除&#xff08;栈&#xff09; 点击消除_牛客题霸_牛客网 描述&#xff1a; 牛牛拿到了一个字符串。 他每次“点击”&#xff0c;可以把字符串中相邻两个相同字母消除&#xff0c;例如&#xff0c;字符…

【机器学习】10——logistic的直观理解

机器学习10——logistic的直观理解 logistic 目录 机器学习10——logistic的直观理解训练过程具体例子 训练过程 数据集: 特征: 学习时间&#xff08;例如&#xff0c;1小时、2小时等&#xff09;。 标签: 是否通过考试&#xff08;0 或 1&#xff09;。 模型结构: 输入: 学习…

OpenAI推出o1系列模型:AI思考力爆表,带来全新智能体验

OpenAI的——o1系列模型&#xff0c;传说中的「草莓」&#xff0c;终于来与大家见面了&#xff01; 这个新模型可不一般&#xff0c;它可以进行复杂的推理&#xff0c;就像在认真思考一样&#xff0c;不再是简单的回答问题。CEO奥特曼称&#xff0c;这是一个全新的开始。它不仅…

智能照明监控系统在发电厂的应用

0前言 国内发电厂普遍使用传统照明控制方法&#xff0c;包括配电箱集中控制、就地开关控制和自动控制。然而&#xff0c;随着技术进步&#xff0c;这些方法已无法满足对安全、舒适、便捷、信息交互和节能环保的需求。因此&#xff0c;实施智能照明控制系统变得必要&#xff0c…

考研报名确认上传身份证户口本学历证明照片如何压缩裁剪

随着考研季节的到来&#xff0c;数以万计的考生开始准备报名所需的各种材料。在这一过程中&#xff0c;证件照片的上传无疑是一个关键环节。正确的照片格式和尺寸不仅能确保报名流程的顺利进行&#xff0c;还能避免因材料不合格而造成的不必要麻烦。本文将详细介绍如何在考研报…

密码学基础--ECDSA算法入门

目录 1.ECDSA签名长度的疑惑 2.ECDSA原理 2.1 生成签名 2.2 验签过程 2.3 签名编码问题 3.小结 1.ECDSA签名长度的疑惑 我们来看看ECDSA签名长什么样子&#xff0c;使用MuscleV02自动生成密钥对&#xff0c;并对message"0x11223344”进行签名&#xff0c;结果如下&a…

一款超级给力的DAW软件flstudio24.1.1.4285最新破解版!

嗨&#xff0c;音乐制作爱好者们&#xff01;今天要跟大家安利一款超级给力的DAW软件&#xff0c;它就是——fl studio24.1.1.4285最新破解版&#xff01; fl studio24.1.1.4285最新破解版简介&#xff1a;这款强大的数字音频工作站软件&#xff0c;是音乐人梦寐以求的工具。它…