哈希函数的简单介绍

news2025/2/8 0:02:21

哈希函数:

hash: =把....弄糟(乱)

又称为散列函数,杂凑函数

什么是哈希表?

哈希表简单来说可以看作是是对数组的升级,(也有不少人认为哈希表的本质就是数组),那么哈希表和数组的具体联系和区别在哪里呢?

我们在利用数组存储数据的时候,记录在数组中的位置是随机的,位置和记录的关键字之间不存在确定的关系。

联系:哈希表是由数组实现的。

区别:数组中存储的元素的和数组下标没有确定的关系,而哈希表中存储的元素和数组的下标有一个确定的关系,我们将这个确定的关系称之为哈希函数(Hash).

哈希函数的应用场景模拟:

         在一个大型超市里找出一个商品的价格

没用哈希函数:

遍历数组,不能一下找到商品的价格,顾客等的时间长,不高兴。

用了哈希函数:

通过哈希函数相同参数,返回特定的值,一下就能找到该元素的位置,顾客很高兴

hash函数的冲突

  • 冲突两个不同的关键字,由于散列函数值相同,因而被映 射到同一表位置上。该现象称为冲突(Collision)或碰撞。

                因素:
  (1)与散列函数有关,一个好的散列函数的值应尽可能平均分布。
       (2)与解决冲突的哈希冲突函数有关。
       (3)与负载因子的大小。太大不一定就好,而且浪费空间严重,负载因子和散列函数是联动的。                

解决冲突的办法:
       (1)开放定址法:线性探查法、平方探查法、伪随机序列法、双哈希函数法。
       (2)拉链法:把所有同义词,即hash值相同的记录,用单链表连接起来。

特点:

不同的参数返回不同的数(不一定)

相同的参数返回相同的数(一定)

不同的商品借助哈希函数,存储数据,可以实现数据到存储位置的一对一映射,从而把数据和属性放在同一张表里(数组),这种表称为哈希表,也成为散列表。

应用场景:

应用下载检测完整性

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

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

相关文章

每日OJ题_BFS解决最短路③_力扣127. 单词接龙

目录 ③力扣127. 单词接龙 解析代码 ③力扣127. 单词接龙 127. 单词接龙 难度 困难 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk: 每一对相邻的单词只差一个字母。…

ObjectMapper的具体介绍与使用

文章目录 声明一、前言二、ObjectMapper与JSONObject比较1、核心主要有三个部分:依赖包不同 2、ObjectMapper使用概述2.1、工程的pom.xml导包信息2.2、创建案例中的测试对象2.3、对象和JSON相互转化2.3.1、测试代码2.3.2、测试结果展示 2.4、集合和JSON像话转化2.4.…

简单的车牌号识别

目录 处理流程与界面各接口编写时遇到的一些问题上传图片识别结果标签显示中文 处理流程与界面 首先点击“上传图片”按钮,可以选择文件夹中含有汽车车牌的图片,并显示在“图片框”中。 点击“检测车牌”按钮,会先对“图片框”中即含有汽车车…

Spring Task 定时任务(含结合cron 表达式)

目录 一、Spring Task的介绍 二、使用方法 2.1 配置类启用定时任务支持: 2.2 同步定时任务 ​编辑2.3 fixedRate 可以看出不能满足我们的日常需求 那如何让其开启异步呢(开启多个线程工作) 三、Spring Task 结合cron表达式 3.1 corn 表…

FreGS:具有渐进频率正则化的3D高斯溅射

FreGS: 3D Gaussian Splatting with Progressive Frequency Regularization FreGS:具有渐进频率正则化的3D高斯溅射 Jiahui Zhang1  Fangneng Zhan2  Muyu Xu1  Shijian Lu1  Eric Xing3, 4 张家慧 1 詹方能 2 许慕玉 1 卢世坚 1 邢志伟 3, 4 1Nanyang Technolo…

Day23_学点儿IDEA_单元测试@Test在新module项目中失效、Jackson核心对象 ObjectMapper识别不到

版本 IntelliJ IDEA 2023.2.4 目录结构 Study(Project) ├──JavaSE(Module) │ └──xxxx └──JavaWeb(Module)└──xxxx问题 1.1 在JavaSE项目中正常可以用的单元测试Test,到了JavaWeb项目中不起作用了 1.2 解决方法 如果是新创建的项目,先…

【Github】一个用于Active Directory的自助密码更改工具

在众多企业的日常运营中,Active Directory(AD)扮演着核心角色,负责管理和维护员工账户。然而,密码重置作为IT支持团队的常规工作之一,往往既耗时又繁琐。虽然一些商业解决方案和通过Windows服务器上RDS服务…

研究生,该学单片机还是plc。?

PLC门槛相对较低,但是在深入学习和应用时,仍然有很高的技术要求。我这里有一套单片机入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习单片机,不妨点个关注,给个评论222,私信22&am…

【小程序】生成短信中可点击的链接

文章目录 前言一、如何生成链接二、仔细拜读小程序开发文档文档说明1文档说明2 总结 前言 由于线上运营需求,需要给用户发送炮轰短信,用户通过短信点击链接直接跳转进入小程序 一、如何生成链接 先是找了一些三方的,生成的倒是快速&#xf…

vector迭代器失效list迭代器失效

目录 一、vector迭代器失效 1.1插入时的迭代器失效 1.2删除时的迭代器失效 二、list迭代器失效 2.1删除时的迭代器失效 在vector与list的模拟实现中,其中有一问题就是迭代器的失效问题,那么迭代器的失效问题具体是指什么,接下来一探究竟…

【C语言基础】:预处理详解(二)

文章目录 一、宏和函数的对比二、#和##运算符2.1 #运算符2.2 ##运算符 三、#undef四、命令行定义五、条件编译六、头文件的包含1. 头文件包含的方式2. 嵌套文件包含 上期回顾: 【C语言基础】:预处理详解(一) 一、宏和函数的对比 宏通常被应有于执行简单…

系统学c#:1、基础准备(软件下载与安装)

一、Vs软件下载与安装 访问Visual Studio官方网站: https://visualstudio.microsoft.com/zh-hans/downloads 下载Visual Studio 运行exe文件,点击“继续” 初始文件安装完成后选择我们需要安装的项,并勾选好必要的单个组件,设…

VisualStudio2010编译GDAL2.2.4

一、源码目录组织结构 makefile.vc文件是windows下nmake编译工具的makefile文件,nmake.opt是makefile文件的编译选项配置选择文件。 二、打开Visual Studio2010的64位命令行,切换到GDAL224的解压根目录下 输入如下命令回车开始编译源码 nmake -f makef…

Bitwarden 一款开源的密码管理器

Bitwarden Bitwarden 是一款开源的密码管理器,提供强大的安全性和便捷的密码管理功能。 适用于运维、系统较多、密码保密程度较高的场景! 主要功能: 密码保存与自动填充:Bitwarden 可以安全地存储您的用户名和密码&#xff0c…

阿里云迁移到AWS云,九河云保姆级教程

随着云计算技术的不断发展,越来越多的企业开始将传统的IT基础设施迁移到云平台上,以获得更高的灵活性、可扩展性和成本效益。在众多云服务提供商中,阿里云和AWS都是备受青睐的选择。本文将探讨如何将阿里云上的资源顺利迁移到AWS云平台,并针对性地进行优化。我们九河云&#xf…

【第9章】@Autowired

文章目录 前言一、Autowired注入1. 属性注入2. 构造方法注入3. set方法注入4. 形参注入5. byName注入5.1 新增实现类5.2 注入 二、Resource1.引入库2.使用2.1 根据注解的name值注入2.2 根据对象变量名注入2.3 根据对象类型注入 总结 前言 【第8章】全注解开发介绍了全注解开发…

电竞陪玩系统开发平台搭建(小程序,公众号,app)线上线下皆有,线下计算距离。

六大核心功能 1.游戏陪练:可以选择当下火爆的游戏内容,选择游戏大神、职业玩家进行陪练,也可约附近路人玩家或是身边的小伙伴语音组队开黑,一起享受边玩游戏边吐槽的无限乐趣。 2.约玩交友:除了游戏陪玩功能,系统还设置了单独的语…

将自己的项目上传至Git

一、安装Git 官网:Git (git-scm.com) 二、注册gitee 官网:工作台 - Gitee.com 进入“我的”出现以下界面 三、创建仓库 点击加号,新建仓库 根据自己的需求取名,描述仓库,开源还是私有,点击创建即可,点击我的即可…

Linux学习-数据库

数据库软件: 关系型数据库: Mysql Oracle SqlServer Sqlite 非关系型数据库: Redis NoSQL 1.数组、链表、文件、数据库 数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失) 文件、…

一文掌握 React 开发中的 JavaScript 基础知识

前端开发中JavaScript是基石。在 React 开发中掌握掌握基础的 JavaScript 方法将有助于编写出更加高效、可维护的 React 应用程序。 在 React 开发中使用 ES6 语法可以带来更简洁、可读性更强、功能更丰富,以及更好性能和社区支持等诸多好处。这有助于提高开发效率,并构建出更…