当前位置: 首页 > news >正文

可拓展哈希

可拓展哈希

借CMU 15445的ppt截图来说明问题。

我们传统静态hash的过程是hash函数后直接将值存入对应的bucket,但是在可扩展hash中,得查询Directory(左),存入directory指向的bucket(右)。

在这里插入图片描述

下面我们存放key=B,哈希值为hash(B),查询directory知道要放到第二个bucket中。

在这里插入图片描述

然后再放一个key=C(hash( C)的值被老师的视频挡住了,就不放图片了),哈希值为hash( C),并且hash( C)高两位也是10,查询directory也要放到第二个bucket,但此时bucket满了,就将该bucket分裂,其他bucket不用变动,那么directory应该怎么变动呢?分为两种情况(先说明此时hash( C)对应第2种情况)

  1. bucket的local depth < global depth:分裂bucket,改变directory中指向该bucket的指针,让他们分别指向分裂出来的两个bucket,并且这两个bucket的local depth+1
  2. bucket的local depth = global depth:分裂bucket,将directory的大小*2,并且重新分配directory中的指针(这里不知道怎么描述比较好,可以结合下面的图来理解),并且分裂后的两个bucket的local depth+1,global depth+1

很明显hash©对应上面的情况2,因此结果如下:
在这里插入图片描述

第一种情况在课件中没有提到,我也做一下说明(懒得画图了)。我们先回到这张图,基于现在这个状态分析第一种情况:

在这里插入图片描述

假设现在第一个bucket是满的(我们这里假设bucket中第三个为01…),然后hash©=00…,要插入第一个bucket,那么根据情况1,我们将bucket分裂为两个bucket,directory不用增长,但是00…和01…指针分别要指向第一个分裂的bucket和第二个分裂的bucket,第一个分裂桶存放了两个01…,第二个分裂桶存放了两个00…

如果还是不懂的话,可以多看几遍上述操作过程或者看下面的参考链接

简单的体会总结:可拓展哈希好处在于某个桶分裂的时候,不用移动其他桶的元素,减少开销。存在的问题很明显,如果多次插入的hash值相同,分裂肯定是不可行的,因为无论怎么分裂,这几个相同hash值都在同一个bucket中,因此需要用overflow bucket的方式来“打补丁”了,所以最基本的可拓展哈希算法不能直接拿来用,得做点变种吧,不过思想值得学习。

参考链接:

https://blog.csdn.net/qq_37026934/article/details/125368237

https://www.bilibili.com/video/BV1xa41137S4?p=7&vd_source=65dfb8ffc4e0d60f317dcde5b6ceb9fd

https://zhuanlan.zhihu.com/p/375039823

相关文章:

可拓展哈希

可拓展哈希 借CMU 15445的ppt截图来说明问题。 我们传统静态hash的过程是hash函数后直接将值存入对应的bucket&#xff0c;但是在可扩展hash中&#xff0c;得查询Directory&#xff08;左&#xff09;&#xff0c;存入directory指向的bucket&#xff08;右&#xff09;。 下面…...

Java 版 spring cloud 工程系统管理 +二次开发 工程项目管理系统源码

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…...

通过伴随矩阵怎么求逆矩阵

设矩阵A为n阶方阵&#xff0c;其伴随矩阵为Adj(A)&#xff0c;则A的逆矩阵为&#xff1a; A⁻ (1/|A|) Adj(A) |A|为A的行列式 Adj(A)为A的伴随矩阵 具体步骤如下&#xff1a; 求出A的行列式|A| 求出A的伴随矩阵 Adj(A) 。伴随矩阵的定义为&#xff1a;对于A的第i行第j列…...

巡检机器人之仪表识别系统

作者主页&#xff1a;爱笑的男孩。 博客简介&#xff1a;分享机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。 如发现文章有误&#xff0c;麻烦请指出&#xff0c;我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666foxmail.c…...

面试官反感的求职者(下)

上期给大家总结了面试中常见的一些问题&#xff0c;今天就接着上次的话题再给大家说说HR反感的求职者&#xff0c;希望同学们可以自省&#xff0c;避免踩雷。小编从如信银行考试中心了解到的有&#xff1a; 第一、缺乏个性者 这种考生在答题中往往表现得千篇一律&#xff0c;从…...

可视化绘图技巧100篇分析篇(二)-生存曲线(LM曲线)(补充篇)

目录 前言 知识储备 生存分析中的基本概念 生存分析 (survival analysis) 事件 (event)...

【100%通过率 】【华为OD机试python】钟表重合时刻【 2023 Q1考试题 A卷|100分】

华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! ■ 题目描述 钟表是日常生活中不可缺少的时间度量计, 其时针、分针、秒针三者的转动速度满足特定规律(见备注)。 现在输入时刻 time ,请计算出时刻 time 小时和 time+1 小时之间, 时针和分针…...

Java线程池编码示例

第1步&#xff1a;自定义线程实现类 Java中多线程编码时&#xff0c;定义线程类有两种方式&#xff1a; 继承Thread类实现Runnable接口&#xff08;由于Java的单继承特性&#xff0c;一般推荐使用此方式&#xff09; public class BizThread implements Runnable {private int …...

如何优化Android 4.x系统设置字体大小

android4.x系统设置字体大小导致应用布局混乱的解决方案 在前几年&#xff0c;Android系统的设置界面还是相对简单的&#xff0c;用户可以通过设置菜单进行各种系统设置&#xff0c;如字体大小、壁纸、铃声等。但是随着用户对系统功能的需求越来越多&#xff0c;Android系统也在…...

Docker安装、Docker基本操作

一、Dokcer安装 1.安装 # 1、yum 包更新到最新,需要几分钟时间(注意:也可以直接跨过) sudo yum update # 2、作用&#xff1a;安装需要的软件包&#xff0c; yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 sudo yum install -y yum-util…...

系统集成项目管理工程师知识点总结

项目经理的五种权利&#xff1a; 职位权力&#xff1a; 来源于管理者在组织中的职位和职权。罚权力&#xff1a; 使用降职、扣薪、惩罚、批评、威胁等负面手段的能力。奖励权力&#xff1a; 给予下属奖励的能力专家权力&#xff1a; 来源于个人的专业技能。参照&#xff08;号…...

【游戏里的网络同步分析】马里奥制造2 多人模式

前置知识 先说几个游戏设计的术语。 PlayerAgent是玩家控制的网络游戏中的角色形象&#xff0c;也是代表在游戏空间中的玩家&#xff0c;被唯一PlayerController所拥有&#xff0c;被所有用户可观测到。 在马里奥制造2中&#xff0c;PlayerAgent一共有四种&#xff1a;马里奥 …...

SSM框架学习-注解开发第三方bean管理

1. 复习xml配置文件管理第三方bean 在Spring中&#xff0c;可以使用依赖注入&#xff08;Dependency Injection&#xff09;来管理和使用第三方Bean。Spring提供了多种方式来进行依赖注入&#xff0c;比如构造函数注入、Setter方法注入、字段注入等。下面以Setter方法注入为例&…...

【数据结构与算法】图——邻接表与邻接矩阵

文章目录 一、图的基本概念二、图的存储结构2.1 邻接矩阵2.2 邻接表2.3 邻接矩阵的实现2.4 邻接表的实现 三、总结 一、图的基本概念 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成&#xff0c;通常表示为&#xff1a;G&#xff08;V,E&#…...

网安笔记02 密码学基础

密码学概述 • 1.1、密码学的基本概念 密码编码学 : 密码编制 密码分析学 : 密码破译 密码学 &#xff1a; 研究密码保护 通信手段的科学&#xff0c; 密码编码学密码分析学 密码技术&#xff1a; 把可理解的消息伪装为不可理解的消息&#xff0c;再复原成原消息的科学 概…...

open3d io操作

目录 1. read_image, write_image 2. read_point_cloud, write_point_cloud 3. 深度相机IO操作 4. Mesh文件读取 1. read_image, write_image 读取jpg. png. bmp等文件 image_io.py import open3d as o3dif __name__ "__main__":img_data o3d.data.JuneauIma…...

【Linux】Linux安装Redis(图文解说详细版)

文章目录 前言第一步&#xff0c;下载安装包第二步&#xff0c;上传安装包到/opt下&#xff08;老规矩了&#xff0c;安装包在opt下&#xff09;第三步&#xff0c;解压安装包第四步&#xff0c;编译第五步&#xff0c;安装第六步&#xff0c;配置redis第七步&#xff0c;设置开…...

setTimeout不准时,CSS精准实现计时器功能

实际开发过程中&#xff0c;我们会经常遇到&#xff0c;首次进入页面进行相应提示&#xff0c;然后指定时间后自动消失或者前端时钟展示等需求。 按照传统方案&#xff0c;我们可以使用 setTimeout 实现。但其存在&#xff1a;实际延时比设定值更久的情况。 setTimeout 不准时…...

单细胞跨模态分析综述

单细胞技术的最新进展使跨模态和组织位置的细胞高通量分子分析成为可能。单细胞转录组数据现在可以通过染色质可及性、表面蛋白表达、适应性免疫受体库分析和空间信息进行补充。跨模态单细胞数据的可用性越来越高&#xff0c;推动出新的计算方法&#xff0c;以帮助科学家获得生…...

【零基础学机器学习 1】什么是机器学习?

机器学习的社会应用 1. 金融风控 机器学习在金融风控方面的应用非常广泛&#xff0c;可以用于预测借款人的信用风险、欺诈行为等。通过收集大量的历史数据&#xff0c;构建机器学习模型&#xff0c;可以对借款人的信用风险进行预测&#xff0c;从而帮助金融机构降低风险。 2…...

ARM处理器与中断——嵌入式(驱动)软开基础(一)

1 CPU的内部结构? CPU的内部结构大致可以分为: (1)控制单元(指令寄存器、指令译码器、操作控制器)。 (2)运算单元(算术逻辑单元)。 (3)存储单元(专用寄存器和通用寄存器) (4)时钟。 2 CPU跟内存、虚拟内存、硬盘的关系? (1)CPU要调用的程序和数据来自…...

WX小程序 - 2

条件渲染&#xff1a; wx:if "{{ newlist.length 0 }}" wx:else 跳路由&#xff1a;绑定点击事件&#xff0c;执行跳转页面 bindtap data-id"{{ item.id }}" 添加id wx.navigateTo 跳路由并传参&#xff0c; 下一个路由 onLoad生命周期可以获得参数…...

开源之夏2023 | 欢迎申请openEuler Embedded SIG开发任务

关于开源之夏 开源之夏是开源软件供应链点亮计划下的暑期活动&#xff0c;由中科院软件研究所与openEuler社区联合主办&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;促进优秀开源软件社区的蓬勃发展。 活动联合各大开源社区&#xff0c;针对重要开源软件…...

【异常解决】vim编辑文件时提示 Found a swap file by the name “.start.sh.swp“的解决方案

vim编辑文件时提示 Found a swap file by the name ".start.sh.swp"的解决方案 一、问题描述二、原因说明三、解决方案3.1 方案1 删除即可3.2 方案2 禁止生成swp文件 一、问题描述 vim编辑文件时提示 Found a swap file by the name “.start.sh.swp”&#xff0c;如…...

「企业应用架构」应用架构概述

在信息系统中&#xff0c;应用架构或应用架构是构成企业架构&#xff08;EA&#xff09;支柱的几个架构域之一 应用架构描述了业务中使用的应用程序的行为&#xff0c;重点是它们如何相互之间以及如何与用户交互。它关注的是应用程序消费和生成的数据&#xff0c;而不是它们的内…...

ePWM模块(3)

比较模块 CMPA:比较寄存器A,其值与TBCTR值比较,相同时,事件发送到动作模块。 CMPB:比较寄存器B,其值与TBCTR值比较,相同时,事件发送到动作模块。 CMPCTL:控制寄存器(重要) SHDWAFULL(或SHDWBFULL):CMPA(或B)阴影寄存器满标志位 0:未满 1:满了 SHDWAMODE(或…...

【笔试强训选择题】Day11.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…...

JVM知识

垃圾收集器就是内存回收的具体实现 Serial Serial收集器是最基本的&#xff0c;发展历史最悠久的收集器。在JDK1.3之前是虚拟机新生代收集的唯一选择。是一种单线程收集器&#xff0c;只会使用一个CPU或者一条收集线程去完成垃圾收集工作&#xff0c;在进行垃圾收集的时候需要…...

操作系统第二章——进程与线程(中)

和光同尘&#xff0c;与时舒卷 文章目录 2.2.1 调度的概念&#xff0c;层次知识总览调度的基本概念高级调度低级调度中级调度三层调度的联系&#xff0c;对比进程的挂起态和七状态模型知识回顾 2.2.2 进程调度的时机&#xff0c;切换与过程&#xff0c;方式知识总览进程调度的时…...

AlphaFold的极限:高中生揭示人工智能在生物信息学挑战中的缺陷

人工智能程序AlphaFold (AlphaFold2开源了&#xff0c;不是土豪也不会编程的你怎么蹭一波&#xff1f;)&#xff0c;通过预测蛋白质结构解决了结构生物信息学的核心问题。部分AlphaFold迷们声称“该程序已经掌握了终极蛋白质物理学&#xff0c;其工作能力已超越了最初的设计”。…...