首页 > 其他分享 >哈希表简单介绍

哈希表简单介绍

时间:2024-09-14 16:55:54浏览次数:3  
标签:存储 映射 元素 介绍 关键字 查找 哈希 简单

概念

顺序结构以及平衡树中,元素关键字与他们存储的位置并没有直接的映射关系,从而会影响查找关键字的效率,顺序结构中查找关键字的时间复杂度为O(N),平衡树查找关键字的时间复杂度为O(log2^N)。

最理想的搜索方法——只搜索一次就能找到关键字。

如果有一种数据结构,能够使得关键字根据某种映射规则,将关键字和它的存储位置一一映射起来,那么在查找时通过映射规则就能够很快将关键字查找出来。

在这个数据结构中

插入元素:

根据某种特定的映射规则,找到关键字在存储结构中的位置,然后插入。

搜索元素:

根据某种特定映射规则,将求得的函数值作为元素的存储位置,然后与结构中此位置的元素比较,若关键字相等,则搜索成功。

该方式就被称为哈希或者散列,使用的映射函数就为哈希函数或者散列函数,构造出来的存储结构就为哈希表或者散列表。

比如:数据集合{1,7,6,4,5,9}

如果哈希函数设置为hash(key)=key%10,则数据在存储结构内会呈现以下关系

该方法查找每一个数只需要进行一次比较,效率很高,但是这种存储方式在实际使用的时候会导致很多的空间浪费,有些空间为空,被没有被有效利用起来,所以实际使用时模数的取值一般为不超过存储结构容量的最大质数。

哈希冲突

哈希冲突的原因是由于,当有一组数据需要通过相同的映射规则存储到到一个存储结构时,此时就有可能两个数得到的hash(key)的值相同,但是又不可能将两个数字同时存储在一个空间里面,这时就造成了哈希冲突,或者叫哈希碰撞。

此时把具有相同哈希地址的不同关键字记为“同义词”。

发生哈希表该如何处理呢?

处理方法

拉链法

比如:数据集合{1,7,6,4,5,9,12,25,36}

加入存储结构容量为7,则哈希函数为hash(key)=key%7。

这种情况就将哈希地址相同的数据元素依次链接到之前元素的后面。

成功查找的平均查找长度 ASL成功=(6*1+2*2)/9=1.11

ASL失败=9/7=1.286。

装填因子=表中记录数/散列表长度。

装填因子越大表示表装得越满。

直接定址法

取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B

由于这是一个一次函数,所以对于每一个不相同的元素对应的值就不相同,所以哈希地址不会存在冲突。

优点:简单、均匀

缺点:需要事先知道关键字的分布情况
使用场景:适合查找比较小且连续的情况

开放定址法

线性探测法

意思就是通过哈希函数处理后得到的关键字哈希地址如果存在冲突,那么就依次往后面去找空位将这个数放进去。

标签:存储,映射,元素,介绍,关键字,查找,哈希,简单
From: https://blog.csdn.net/m0_63703622/article/details/142261096

相关文章

  • DuckDB简单使用及Python操作
    DuckDB简介DockDB官网DuckDB是一款开源免费类似Sqlite的嵌入式数据库,支持直接使用内存或单个文件作为数据库。DuckDB着重于数据处理和分析,是一个款OLAP(联机分析处理)类型的数据库,主要特点如下:开源免费,MIT协议功能完善,支持标准SQL、事务、二级索引等高性能,低消耗(内存/文件占用小)灵......
  • 零基础快速上手HarmonyOS ArkTS开发5---从简单的页面开始2---使用List组件构建列表、G
    接着继续往下学习页面布局的知识。最近发现之前学习这一章节的内容在官方已经被下了,替换成了另外一个案例了(https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497398588123):而且整个视频的风格也不一样了,先看看之前的这个美女讲师:再看看现在的:哇塞,档次......
  • pdf密码怎么解除?简单易懂的8个pdf解密方法分享,2分钟搞定
    pdf密码怎么解除?在工作生活中,为了保护文件的信息隐私安全,我们会选择给pdf文件添加密码。但如果我们经常编辑这份加密pdf文件的话,每次打开之后都需要重新输入密码,就会变得非常麻烦。因此我们需要对加密pdf进行密码解除操作,要怎么解除pdf密码呢?今天小编就来教大家8个简单好用的PD......
  • 【CSS】mask-image属性的详细介绍
    mask-image属性是CSS中一个用于指定元素遮罩图像的属性。它允许开发者通过图像来遮罩元素的背景或其他图像内容,实现复杂的视觉效果。以下是对mask-image属性的详细介绍:一、属性定义mask-image属性定义了一个图像的遮罩层,该遮罩层将应用于元素的内容上。只有遮罩图像的非透明部分才......
  • 中秋节快乐简单html页面
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>中秋快乐</title><style>@......
  • 一款安全、简单、有效的蜜罐平台Hfish,windows 搭建教程!
    一款安全、简单、有效的蜜罐平台Hfish,windows搭建教程!蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方......
  • GO语言初步详细介绍以及环境变量的配置----保姆级教程
    一:概述Go语言(也称为Golang)是一种由Google公司设计和开发的静态类型、编译型编程语言。自2009年正式对外发布以来,Go语言以其简洁、高效和强大的并发处理能力迅速赢得了开发者的青睐,并在多个领域得到广泛应用。二:具体说明<1>Go语言的详细介绍1.1Go语言的特点简洁、易读和易写:Go语言......
  • 软件测试的步骤、工具及预期结果介绍
    软件测试是确保软件质量、性能和可靠性的重要过程。它涉及多个步骤,使用各种工具,并期望达到特定的结果。以下是软件测试的详细描述: 一、软件测试的步骤1.需求分析:在测试之前,先要理解软件的需求规格说明书(SRS),明确软件的功能、性能、安全性等要求。2.测试计划:基于需求分析,制......
  • 无需代码,通过逻辑引擎简单几步配置,实现邮件自动化发送
    无论是在个人生活中还是在工作场景中,发送邮件是一个常见的需求。通常在业务系统中有这样的场景:新增数据的时候动态取一些信息然后发送邮件给客户开户发送密钥邮件等那么在JVS低代码逻辑引擎中,我们可以通过配置【发送邮件】节点来实现配置说明发送邮件,需要有一个邮件传输协议服务器......
  • 网络编程介绍&TCP&UDP协议
    1.网络编程入门1.1网络编程概述计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程在网络通信协议下,不同计算机上运行的程序......