HashMap查找

news2024/11/15 11:08:17

文章目录

  • 1 哈希表的基本概念
    • 1.1 两个例子
    • 1.2 如何查找
    • 1.3 若干术语
  • 2 哈希函数的构造方法
    • 2.1 直接定址法
    • 2.2 除留余数法
  • 3 处理冲突的方法
    • 3.1 开放地址法
      • 3.1.1 线性探测法
      • 3.1.2 二次探测法
      • 3.1.3 伪随机探测法
    • 3.2 链地址法(拉链法)
      • 3.2.1 创建步骤
      • 3.2.2 链地址法的特点
  • 4 哈希表的查找
    • 4.1 线性探测法举例
    • 4.2 链地址法举例
    • 4.3 哈希表的查找性能分析
  • 5 结论

1 哈希表的基本概念

在这里插入图片描述

  • 基本思想:记录的存储位置与关键字之间存在对应关系
  • 对应关系:使用 h a s h hash hash函数进行对应
  • h a s h hash hash函数: L o c ( i ) = H ( k e y i ) Loc(i) = H(keyi) Loc(i)=H(keyi),常见的“键值表示法”

1.1 两个例子

键值存储举例。
在这里插入图片描述
在这里插入图片描述

1.2 如何查找

在这里插入图片描述
时间复杂度仅为 O ( 1 ) O(1) O(1),但是空间空着非常多,效率较低。

1.3 若干术语

  • 散列方法(杂凑法):选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放;
    查找时,由同一个函数对给定值 k k k计算地址,将 k k k与地址单元中元素关键码进行对比,确定查找是否成功。

  • 散列函数(杂凑函数):散列方法中使用的转换函数, H ( k e y ) = k H(key) = k H(key)=k

  • 散列表(哈希表,杂凑表):按上述思想构造的表。

  • 冲突:不同的关键码映射到同一个散列地址,键不等,地址相等。

  • 同义词:具有相同函数值的多个关键字
    在这里插入图片描述

2 哈希函数的构造方法

在这里插入图片描述
在这里插入图片描述
构造散列函数考虑的因素

  1. 执行速度(即计算散列函数所需时间);
  2. 关键字的长度;
  3. 散列表的大小;
  4. 关键字的分布情况;
  5. 查找频率。

在这里插入图片描述

2.1 直接定址法

在这里插入图片描述
不会产生冲突。

2.2 除留余数法

在这里插入图片描述
按照余数来进行存储。

3 处理冲突的方法

在这里插入图片描述

3.1 开放地址法

在除留余数法的基础上加上了一个增量序列。
在这里插入图片描述

3.1.1 线性探测法

在这里插入图片描述
在这里插入图片描述
di是从1开始进行递增的,1不行就加2加2不行就加3,以此类推。

3.1.2 二次探测法

在这里插入图片描述

3.1.3 伪随机探测法

增量变为伪随机数。在这里插入图片描述

3.2 链地址法(拉链法)

基本思想:相同散列地址的记录链成一单链表m个散列地址就设m个单链表,然后用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构。
在这里插入图片描述
这四个求余数后,相同,所以把这些链接在同一个单链表上。在这里插入图片描述
在这里插入图片描述

3.2.1 创建步骤

在这里插入图片描述

3.2.2 链地址法的特点

  • 非同义词不会冲突,无“聚集”现象
  • 链表上结点空间动态申请,更适合于表安不确定的情况

4 哈希表的查找

在这里插入图片描述

4.1 线性探测法举例

在这里插入图片描述

4.2 链地址法举例

在这里插入图片描述

在这里插入图片描述

4.3 哈希表的查找性能分析

在这里插入图片描述
在这里插入图片描述

5 结论

在这里插入图片描述

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

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

相关文章

STM32-风速传感器(ADC)

目录 0 说明 1 传感器介绍 2 代码说明 2.1 ADC.c 2.2 adc.h 2.3 main.c 0 说明 本篇文章主要是说明怎么使用STM32单片机读取风速传感器采集到的数据,读取方式是ADC,并且附带着STM32所需要的全部代码,所使用的风速传感器如下图所示。 附&am…

Redis—相关背景

Redis—相关背景 🔎Redis—特性In-memory data structures—在内存中存储数据Programmability—可编程性Extensibility—可扩展性Persistence—持久化Clustering—集群High availability—高可用 🔎Redis 为什么快🔎Redis 的使用场景Real-tim…

看看ChatGPT的Embedding接口都完成哪些任务

调用Embedding接口完成文本分类 前面博客介绍了如何调用ChatGPT的Embedding接口完成文本聚类任务,实现过程入下图所示: 除了完成文本分类,调用Embedding接口还可完成聚类任务。 调用Embedding接口完成聚类任务 聚类任务是一种无监督学习任…

tinymce实现将word中内容(文字图片等)直接粘贴至编辑器中——利用插件tinymce-powerpaste-plugin

TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 TinyMCE的优势: 开源可商用,基于LGPL2.1 插件丰富,自带插件基本涵盖日常…

活字格性能优化技巧——如何利用数据库主键提升访问性能

大家都知道,活字格作为企业级低代码开发平台,拥有6大引擎,3大能力,能够高效落地企业级应用。在每年的应用大赛中也能看到很多格友利用活字格做了很多复杂的应用,例如2021年企业级低代码应用大赛中宁波聚轩利用活字格做…

vue使用qrcodejs2-fix或者qrcodejs2插件生成二维码

1. vue2安装 npm i qrcodejs2 1.1. vue3安装 npm install qrcodejs2-fix 2. 组件中引入并封装成公共组件&#xff0c;vue3版 <template><!-- 二维码生成 --><div class"body-div"><div style"width: 100%;height: 100%;" :id&quo…

誉天程序员-2301-3-day05

文章目录 知识回归1、单点登录SSO single sign on&#xff08;面试必考&#xff0c;10分&#xff09;2、Vue重大的扩展&#xff0c;Vue框架越来越完善&#xff0c;Vuex状态管理&#xff08;共享数据&#xff09; 全局守卫嵌套路由 知识回归 1、单点登录SSO single sign on&…

Vue2基础七、refnextTick自定义指令

零、文章目录 Vue2基础七、ref&nextTick&自定义指令 1、ref **作用&#xff1a;**利用 ref 和 $refs 可以用于 获取 dom 元素, 或 组件实例**特点&#xff1a;**查找范围 → 当前组件内 (更精确稳定)&#xff0c;用document.querySelect(‘.box’) 获取的是整个页面…

Ubuntu Server版 之 mysql 系列(-),安装、远程连接,mysql 创建用户、授权等

Ubuntu 分 桌面版 和 服务版 桌面版 &#xff1a;有额外的简易界面 服务版&#xff1a;是纯黑框的。没有任何UI界面的可言 安装mysql 安装位置 一般按照的位置存放在 /usr/bin 中 sudo apt-get install mysql-server查看mysql的状态 service mysql status mysql 安全设置…

【C语言课程设计】图书管理系统

引言&#xff1a; 图书管理系统是一个重要的信息管理系统&#xff0c;对于图书馆和书店等机构来说&#xff0c;它能够方便地管理图书的录入、显示、查询、修改和删除等操作。本实验基于C语言开发了一个简单的图书管理系统&#xff0c;通过账户名和密码进行系统访问和权限控制&a…

java数组对象初始化分析

分析代码 public static void main(String[] args) {int a10,b20,c30,d 40,e 50,f60;int aa[] {a,b,c,d,e,f};aa[2] 100;}代码的字节码 图解分析 refs https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-6.html#jvms-6.5.aloadhttps://docs.oracle.com/javase/sp…

WebServer

socket是啥&#xff1f; 网络套接字&#xff08;Socket&#xff09;通常被表示为一个类或类似于类的数据结构。网络套接字类封装了网络通信的细节&#xff0c;并提供了用于建立、发送和接收网络数据的方法和属性。常见的成员有源端口&#xff0c;目标端口&#xff0c;源IP,目…

C语言:结构体,联合体

文章目录 一、结构体1.结构体的声明和结构体变量的定义2.结构体变量初始化3. 访问结构体成员4.结构体的内存对齐 二、联合(共用体)总结 一、结构体 结构体是一组元素类型不同的元素的集合 1.结构体的声明和结构体变量的定义 结构体的声明包含三个部分&#xff0c;标记名(tag…

uniapp 微信小程序:页面+组件的生命周期顺序

uniapp 微信小程序&#xff1a;页面组件的生命周期顺序 首页页面父组件子组件完整顺序参考资料 这个uniapp的微信小程序项目使用的是 VUE2 首页 首页只提供了一个跳转按钮。 <template><view><navigator url"/pages/myPage/myPage?namejerry" hov…

Vue中使用Typescript及Typescript基础

准备工作 新建一个基于ts的vue项目 通过官方脚手架构建安装 # 1. 如果没有安装 Vue CLI 就先安装 npm install --global vue/cli最新的Vue CLI工具允许开发者 使用 TypeScript 集成环境 创建新项目。 只需运行vue create my-app 然后选择选项&#xff0c;箭头键选择 Manuall…

国产芯片架构再下一城,ARM或被彻底抛弃,外媒:自作自受

有消息指出特定厂商的5G手机芯片将采用RISC-V架构&#xff0c;这是国产芯片彻底抛弃ARM的标志&#xff0c;毕竟ARM如今对中国芯片越来越不友好&#xff0c;最新款的ARM V9架构就未对多家中国芯片企业授权&#xff0c;抛弃ARM在情理之中。 据悉特定企业的5G手机芯片为RISC-V架构…

Vue项目中强制刷新页面的方法

我们在动态切换组件的过程中&#xff0c;导航栏和底栏不动&#xff0c;动态切换中间区域的情况&#xff0c;在首页可以进行跳转任意组件&#xff0c;在组件与组件之间不能相互跳转&#xff0c;路由发生了变化&#xff0c;但是页面未改变&#xff0c;这时我们就需要强制刷新页面…

窗口透明丨窗口透明度设置控件透明以及窗体透明源码

透明窗口&#xff08;窗口上面文字图片等内容不透明&#xff09;的实现&#xff08;使用SetLayeredWindowAttributes API函数&#xff09; SetLayeredWindowAttributes的实现必须将窗口设置为WS_EX_LAYERED的扩展风格。 然而&#xff0c;只有WS_POPUP窗口才能设置WS_EX_LAYER…

SG函数Nim游戏博弈论

移棋子游戏 题目 https://vjudge.csgrandeur.cn/problem/LibreOJ-10243 给定一个有 N 个节点的有向无环图&#xff0c;图中某些节点上有棋子&#xff0c;两名玩家交替移动棋子。 玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点&#xff0c;无法移动者输掉游戏。 对…

中国撤销3000亿订单,美芯质问还能卖给谁?Intel或暂停工厂

过去两年多来&#xff0c;美国芯片行业的收入大幅减少&#xff0c;然而这还不是低点&#xff0c;近期传出中国或撤销3200亿美元的芯片订单&#xff0c;这更是让美国芯片行业震惊&#xff0c;美芯巨头因此质问美国芯片卖给谁&#xff1f; 中国这几年一直都在稳步减少芯片进口&am…