HashMap查找

文章目录

  • 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 结论

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#..上位机软件的未来是什么?

C#是一种流行的编程语言,广泛应用于桌面应用程序和上位机软件开发。未来,C#上位机软件将继续不断发展和创新,以满足用户日益增长的需求。以下是我认为C#上位机软件未来可能会涉及的一些方向: 更加智能化:随着人工智能…

idea连接远程服务器上传war包文件

idea连接远程服务器&上传war包 文章目录 idea连接远程服务器&上传war包1. 连接服务器2.上传war包 1. 连接服务器 选择Tools -> Start SSH Session 添加配置 连接成功 2.上传war包 Tools -> Deployment -> Browse Remote Host 点击右侧标签,点击&…

Manjaro KDE 22.1.3vmware无法复制文件

Wayland 是 X11 的现代替代品,几十年来 X11 一直是 Linux 上的默认窗口系统。 Wayland 是一种通信协议,定义 X Window 显示服务器和客户端应用程序之间的消息传递。 软件还不兼容 使用X11即可

linux查看服务器系统版本命令

有时我们需要在linux服务器上安装DB、Middleware等,为了保证兼容性,我们需要知晓被提供的linux服务器版本是否满足需求,下面就说一说linux查看服务器系统版本命令。 1.cat /etc/redhat-release 适用于:rhel/centos等 2.cat /etc…

java static修饰的静态成员

静态成员 特点: 1.静态成员可以被本类所有对象共享2.静态成员可以通过类名调用也可以推荐对象调用,但是推荐使用类名调用!3.静态成员随着类的加载而加载,优先于对象存在的静态方法的注意事项: 1.非静态方法可以访问任…

大数据Flink(四十九):框架版本介绍和编程语言选择

文章目录 框架版本介绍和编程语言选择 一、框架版本介绍 二、编程语言选择 框架版本介绍和编程语言选择

1-Linux的目录结构

Linux的目录结构是规定好的,不可以随意进行更改! Linux的文件系统是采用级层式的树状目录结构,最上层是根目录–/,然后再在根目录下创建其它的目录。 各个目录中主要负责的功能和作用如下:(主体的结构一定…

Cisco 路由器配置管理

大多数网络中断的最常见原因是错误的配置更改。对网络设备配置的每一次更改都伴随着造成网络中断、安全问题甚至性能下降的风险。计划外更改使网络容易受到意外中断的影响。 Network Configuration Manager 网络更改和配置管理 (NCCM)解决方案&#xff…

springboot编写mp4视频播放接口

简单粗暴方式 直接读取指定文件,用文件流读取视频文件,输出到响应中 GetMapping("/display1/{fileName}")public void displayMp41(HttpServletRequest request, HttpServletResponse response,PathVariable("fileName") String fi…

掌握文件锁:使用flock实现多个进程之间的无缝文件同步

使用flock实现多个进程之间的无缝文件同步? 博主简介一、引言二、文件锁的概述2.1、定义文件锁2.2、文件锁的种类2.3、文件锁的作用 三、使用flock实现文件锁3.1、flock的简介3.2、flock的使用方法3.3、flock文件锁命令3.4、flock对文件同步的帮助 四、实现多个进程…

GRE TAP的工作原理与5G工业物联网中的应用

随着互联网新技术的发展以及智能化水平的提高,各企业对实时数据传输的需求也在不断提升,企业愈发重视数据中心的建设,以保障企业内网数据安全。 GRE(Generic Routing Encapsulation,通用路由封装)协议属于…

物理机安装ESXI时遇到No Network Adapters

前不久在虚拟机下安装完成了ESXI,果断地使用了,确实很不错了, 配合我上次发的密匙(https://www.cnntt.com/archives/5556)妥妥爽。 虚拟机中试玩了一下,就开始布置到我的物理机上了,毕竟我以后…

【LeetCode】142.环形链表Ⅱ

题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部…

无涯教程-jQuery - Highlight方法函数

Highlight 效果可以与effect()方法一起使用。这将以特定的颜色突出显示元素的背景,默认为黄色(yellow)。 Highlight - 语法 selector.effect( "highlight", {arguments}, speed ); 这是所有参数的描述- color - 高亮显示颜色。默认值为"#fff…

(八九)如何与InfluxDB交互InfluxDB HTTP API

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦! 第 8 章 前言:如何与InfluxDB交互 1、InfluxDB启动后,会向外提供一套HTTP API。外部程…

【Rust教程 | 基础系列 | Cargo工具】Cargo介绍及使用

文章目录 前言一,Cargo介绍1,Cargo安装2,创建Rust项目2,编译项目:3,运行项目:4,测试项目:5,更新项目的依赖:6,生成项目的文档&#xf…

Nacos的搭建及服务调用

文章目录 一、搭建Nacos服务1、Nacos2、安装Nacos3、Docker安装Nacos 二、OpenFeign和Dubbo远程调用Nacos的服务1、搭建SpringCloudAlibaba的开发环境1.1 构建微服务聚合父工程1.2 创建子模块cloud-provider-payment80011.3 创建子模块cloud-consumer-order80 2、远程服务调用O…

Caffeine本地缓存技术

说明:Caffeine是本地缓存方案,在所有本地缓存中命中率最佳,参考下图(引自http://t.csdn.cn/oiQlH),本文介绍Caffeine在SpringBoot项目中的应用。 使用 例如现在有两个接口,一个查询所有用户&am…

分析npm run serve之后发生了什么?

首先需要明白的是,当你在终端去运行 npm run ****,会是什么过程。 根据上图的一个流程,就可以衍生出很多问题。 1,为什么不直接运行vue-cli-service serve? 因为直接运行 vue-cli-service serve,会报错&#xff0c…

数字光源控制器报警说明

Revision Sheet: Rev Data Author Description 1.0 20230729 Shuangyi 数字光源控制器报警说明 V1.0 一.报警说明 当我们所连接的光源负载超出光源控制器本身驱动能力的时候,我们会对控制器进行保护,从以下方式可知道过流的情况,如…