cmu15545-哈希表(Hash Table)

news/2024/11/15 15:23:03/文章来源:https://www.cnblogs.com/timothy020/p/18536926

基本概念

哈希和树一样,是数据库系统中用于访问数据的方法。

image-20241109143725399

空间复杂度:$O(n)$

时间复杂度:$O(1)~ O(n)$

权衡:更大的哈希空间(碰撞减少),还是更少的哈希空间(碰撞处理)?

哈希函数

  • CRC-64(1975)

  • MurmurHash (2008)

  • Google CityHash (2011)

  • Facebook XXHash (2012) 【最常用】

  • Google FarmHash (2014)

哈希结构

两种思路:

  • Operating Address【空间换时间】
    • Linear Probe Hashing
    • Cuckoo Hashing
  • Chained Hashing(Bucket)【时间换空间】
  • 结合(渐进式扩展哈希空间)
    • Extenible Hashing
    • Linear Hashing【最常用】

下面探讨如何通过这些机制避免或处理哈希值碰撞。

Linear Probe Hashing

  • 碰撞时移动到下一个槽

  • 删除时建立墓碑:墓碑可以被新值代替;也可以通过垃圾回收清理

    image-20241109145156402

  • 非唯一值怎么存:键值同存(如上图所示,每个槽里存放的是键和值)

Cuckoo Hashing

  • 基本思想:多哈希函数+鸠占鹊巢

  • 注意点:无限循环检测

过程演示:

有空位时:直接占用。

image-20241109152501060

发生碰撞时,如果两个哈希位都已经被占用了,踢出原来的数据,让他重新哈希,以此反复,直到找到空位。

image-20241109152712021

image-20241109152733975

![image-20241109152752871](/Users/iven/Library/Application Support/typora-user-images/image-20241109152752871.png)

获取时只需要找两个哈希位即可。

image-20241109152828049

Chained Hashing

  • 碰撞数据存在哈希桶中,桶满则溢出
  • 布隆过滤器加速查询

image-20241109153732659

Extenible Hashing

依照哈希值的位映射到哈希桶。

00和01指向同一个桶是因为复用。

插入C时,对应的哈希桶10已经满了,选择位增加为3,拓展10的哈希空间为100和101,移动数据,尝试插入。

image-20241109155148853

Linear Hashing

基本思想:

  • 渐进式扩展:当哈希桶溢出时,不是分裂溢出的哈希桶,分裂指针指向的哈希桶,渐进地扩充所有哈希桶。

  • 循环扩展:当本轮所有哈希桶都分裂完后,指针跳转回起始位置,重新开始循环,并丢弃上一轮的哈希函数。

  • 查询保证:查找一个数据最多只会有两次哈希。

过程演示:

插入17时,1号哈希桶溢出,扩展0号哈希桶,分裂指针下移;数据8和20对8取模做数据重分布。

image-20241109155520745

image-20241109160012353

查询值20时,对4取模,落到0号桶,由于在分裂指针上方,说明需要再次对8(2n)取模,落到4号桶内,查询得到值20。

image-20241109160206542

垃圾回收:如果最末位的哈希桶为空,可以删除,然后上移分裂指针。

分裂指针走到哪里跳回开头,不会无限循环吗:有变量记录当前轮的截止位置,避免无限循环。

为什么在0号桶对4取模后,再对8取模,得到的结果只会在0和4号桶,而不会到其他比如5,6,7号桶:见下图。

image-20241109162347072

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验3 类和对象-基础编程2

实验任务1: Button.hpp,Window.hpp,task1.cpp,源码,运行测试结果如下#pragma once#include <iostream> #include <string>using std::string; using std::cout;// 按钮类 class Button { public:Button(const string &text);string get_label() const;voi…

【论文系列】DDIM ---DDPM上的优化

What DDIM是啥? DDIM(Denoising Diffusion Implicit Models) 是一种扩散模型的变体,旨在加速图像生成过程并保持生成质量。它是在DDPM(Denoising Diffusion Probabilistic Models)的基础上发展出来的,提供了一种更高效的去噪采样过程,减少了采样所需的步骤数量。 Why D…

解决zip解压之后中文乱码问题

1、打开windows 设置 语言和区域2、打开管理语言设置3、取消勾选这个Beta,然后重启即可

VMware ESXi 6.7 U3u (ESXi670-202403001) 下载

VMware ESXi 6.7 U3u (ESXi670-202403001) 下载VMware ESXi 6.7 U3u (ESXi670-202403001) 下载 VMware ESXi 6 Extend Support Release 请访问原文链接:https://sysin.org/blog/vmware-esxi-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org产品简介 VMware ES…

VMware vCenter Server 6.7U3w 发布下载 - ESXi 集中管理软件

VMware vCenter Server 6.7U3w 发布下载 - ESXi 集中管理软件VMware vCenter Server 6.7U3w (安全更新) - ESXi 集中管理软件 集中式控制 vSphere 环境 请访问原文链接:https://sysin.org/blog/vmware-vcenter-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org…

H264码流的RTP封装

H264、RTP、视频编码一、RTP协议头: 1.RTP头定义:RTP协议头一般固定为12个字段,在每一个RTP数据包中都存在。各字段的含义如下: version(V):2bits:标识RTP的版本,当前协议版本固定为2. padding(P):1bits:填充位。默认0,如果为1,则在该报文的末尾填充一个或多个额外的…

批量计算遥感影像NDVI:Python代码

本文介绍基于Python中的gdal模块,批量基于大量多波段遥感影像文件,计算其每1景图像各自的NDVI数值,并将多景结果依次保存为栅格文件的方法~本文介绍基于Python中的gdal模块,批量基于大量多波段遥感影像文件,计算其每1景图像各自的NDVI数值,并将多景结果依次保存为栅格文件…

线程池创建方式

线程池创建方式一、方式一:通过ThreadPoolExecutor构造函数来创建(推荐) 方式二:通过 Executor 框架的工具类 Executors 来创建。Executors工具类提供的创建线程池的方法如下图所示: 可以看出,通过Executors工具类可以创建多种类型的线程池,包括:1. FixedThreadPo…

HTML基础练习

注意:全卷满分140+45分,时间40分钟。 全开卷,并允许联网查询。 凡是标注“不定项”的,每个选项均分总分,每错选或漏选一个均仅扣除该项得分。例如8分4选项题,答案为AD,选ABD得6分,A得6分,AB得4分。 所有题目均为人工阅卷,不需要特别遵守格式规范,均按照答案酌情给分…

将URDF模型文件导入Issac_Gym系列【1】

1 在solidworks中导出URDF文件 1 这里按照古月居老师的要求进行基本的配置 https://www.bilibili.com/video/BV1Tx411o7rH/?vd_source=fcddcf87e97b17fd530dc88db643aab3 关于catkin_ws这种ROS的工作环境的配置,具体可以参考我的这篇博客 https://www.cnblogs.com/myleaf/p/1…

SpringMVC 学习笔记

概述 SpringMVC 中的 MVC 即模型-视图-控制器,该框架围绕一个 DispatcherServlet 改计而成,DispatcherServlet 会把请求分发给各个处理器,并支持可配置的处理器映射和视图渲染等功能 SpringMVC 的工作流程如下所示:客户端发起 HTTP 请求:客户端将请求提交到 DispatcherSer…

VMware vSphere 6.7 Update 3w 下载

VMware vSphere 6.7 Update 3w 下载VMware vSphere 6.7 Update 3w 下载 ESXi 6.7 U3 & vCenter Server 6.7 U3, Dell, HPE, LENOVO, Inspur Custom Image 请访问原文链接:https://sysin.org/blog/vmware-vsphere-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sys…