关于哈希的个人笔记

哈希查找算法之线性探测法(开放地址法) 哈希查找是一种时间复杂度为O(1)的一种效率极高的查找方法,与常见的遍历查找不同,哈希算法是通过数组元素数值与哈希表下标构建的一种查找方法,因此我们不需要遍历整个数组,即可对其进行访问。... 阅读详情

Hash

什么是哈希?

Hash就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。

哈希表?

利用hash技术实现,理想情况下为一个包含有关键字(key-index,可以为整数,字符串等)的具有固定大小的数组。输入待查找的值即关键字,即可查找其对应的数据元素。
比如 hashMap

Hash函数

最常见(计算简单,适用范围广):

  • 除留余数法
    hash(K)=K mod C
    K:数据元素关键字
    C:接近或等于哈希表本身的长度,选取素数时效果最好

  • 其他函数
    适用于特定场景,几乎很少见,基本上大同小异,都是为了计算出特定场景下合适的哈希地址。
    1、直接寻址法:hash(k)=aK+C
    优点:不产生冲突
    缺点:空间复杂度高,可能会造成大量的空间浪费
    场景:元素较少
    2、数字分析法:选取数据元素关键字中某些取值较均匀的数字来作为哈希地址
    优点:能尽量避免冲突
    缺点:只能适用于能够预先估计出全部关键字上每一位各种数字出现的频率。
    3、平方取中法:对关键字进行平方,再取中间的数位数字作为哈希地址。
    优缺点不详,平方是否需要注意位溢出?另外运算量是否很大?
    4、折叠法:将关键字分割成相同位数的几部分,再将这几部分相加取和,舍去进位后作为哈希地址。
    场景:适用于关键字位数较多
    5、随机数法:H(key)=Rand(key)
    场景:适用于对长度不等的关键字构造哈希函数。
    6、旋转法:将关键字的数值位置进行旋转(比如将后两位数字移动前面)
    场景:适用于关键字中部分数字相同的情况。
    7、相乘取整法:将关键字与某个常数相乘(0

处理哈希碰撞(常见的两种方法)
  • 开放地址法
    共同点:通过一系列的计算在哈希表上找到空单元,把元素填进去。
    不同点:寻找空单元的计算方法不同
    1.线性探测法
    冲突发生时,顺序查看表中下一单元,直到找到一个空单元或查遍全表。
    2.二次探测法
    冲突发生时,在表的左右进行跳跃式探测,比较灵活。
    Di=1^2 , -1^2 , 2^2 , -2^2 …..k^2 , -k^2 ( k <= m/2)
    3.伪随机探测法
    Di = 伪随机数列

  • 链地址法(拉链法)
    将所有哈希地址为i的元素构成一个称为同义词的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。
    Java 的hashMap就是采用链地址法。
    特点:寻址困难,插入和删除简单
    适用场景:适用了经常插入和删除

比较(开放地址法和链地址法)

1、链地址法处理冲突简单,无堆积现象,非同义词不会发生冲突,因此平均查找长度较短。
2、由于链地址中链表上的结点空间是动态申请的,更适用于无法确定表长的情况。
3、开方地址法为减少冲突,要求装载因子a较小,故当结点规模较大时会浪费很多空间。而拉链法中可先取a>=1,且结点较大时,拉链法中增加的指针域可忽略不计,节省节点。
4、拉链法中删除结点的操作易于实现。只需要简单的删去链表上的节点,但开方地址法中不能简单的删除结点空间置为空,否则将截断在它之后走入散列表的同义词结点的查找路径。这是因为开放地址法中,空地址单元(即开放地址)都是查找失败的条件。因为在开放地址法处理冲突的散列表上执行删除操作,只能在被删结点上做删除标记,而不能真正删除结点。实际操作待表格重新整理时在进行——称为情性删除。

相似图像搜索的哈希算法思想及实现(差值哈希算法和均值哈希算法) 图像相似度比较哈希算法: 什么是哈希(Hash)? • 散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小 的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定 下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums, 或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。 • 通过哈希算法得到的任意长度的二进制值映射为较短的固定长度的二进制 阅读详情

相关推荐

密码学之哈希算法

1 哈希算法 哈希算法是将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。 哈希算法又称为摘要算法,它可以将任意数据...

star_yang的博客 1万+

开放地址法开放地址法

开放地址法是指大小为 M 的数组保存 N 个键值对,其中 M > N。我们需要依靠数组中的空位解决碰撞冲突。基于这种策略的所有方法被统称为“开放地址”哈希表。线性探测法,就是比较常用的一种“开放地址”哈希表的一种实现方式。线性探测法的核心思想是当冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表。简单来说就是:一旦发生冲突,就去寻找下 一个空的散列表地址,只要散列表足够大,空的散列地址总能找到。 线性探测法的数学描述是:h(k, i) = (h(k, 0) + i) mod m,i表示当

地推 4791

密码学基础(一)——哈希算法

由于哈希算法的单向性,可以从前一个数据块原文计算出下一个数据块所用的哈希值输入,但已知一个哈希值输入,难以反推出所有可能的数据块原文。哈希算法:哈希算法不可逆,包括:MD4、MD5、hash1、ripeMD160、SHA256、SHA3、Keccak256、国家标准SM3(国家密码管理局)哈希加“盐”(salt),所谓加“盐”,就是在明文的随机位置加上一串随机的字符串再进行hash,防止彩虹表攻击。加密/解密算法:加密解密算法可逆,但是必须要有秘钥,对称加密,非对称加密,数字签名算法DSA。

奔跑的蜗牛_Kieasr 7909

冲突处理方法----开放定址法

常用处理冲突的思路: 换个位置: 开放地址法 同一位置的冲突对象组织在一起:链地址法 1 开放定址法(Open Addressing) 一旦产生了冲突(该地址已有其它元素),就按某种规则去寻找另一空地址 若发生了第 i 次冲突,试探的下一个地址将增加di,基本公式是: hi(key) = (h(key)+di) mod TableSize ( 1≤ i &amp;amp;amp;amp;amp;lt; TableSize ) di...

桑凯旋的博客 1万+

C++哈希算法详解(hash、hash!)

C++哈希算法详解

2401_90042730的博客 1976

哈希算法教程(个人总结版)

哈希算法(Hash Algorithm)是一种将任意长度的输入(也称为消息)转换为固定长度的输出(也称为哈希值、散列值、摘要)的算法。SHA-256(Secure Hash Algorithm 256-bit)是SHA-2(Secure Hash Algorithm 2)家族中的一种,广泛应用于安全性要求较高的场景,如区块链、数字签名等。散列函数用于哈希表(Hash Table)等数据结构中,将数据映射到固定大小的数组上,以实现高效的数据存储和检索。哈希算法可以用于数据库的索引,提高数据检索的效率。

年糕的博客 5715

开放地址法

讲了讲项目还是回到基础中来吧,毕竟根基打得越牢固,才能学的更快更稳今天来分享一些我学习整理的关于开放地址法的内容:开放地址法      根据以上hash函数计算数组下标时,当遇到数据存放的冲突时就需要重新找到数组的其他位置。关于开放地址法通常需要有三种方法:线性探测、二次探测、再哈希法。 1.开放地址法:容易产生堆积问题;不适于大规模的数据存储;散列函数的设计对冲突会有很大的影响;插入时可能会出现...

沉迷代码无法自拔 1万+

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

C++进阶:哈希

哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。

QinMou 1120

VMware Workstation Pro必备技巧:5分钟搞定Ubuntu虚拟机磁盘瘦身(附常见错误解决)

本文详细介绍了如何为VMware Workstation Pro中的Ubuntu虚拟机进行磁盘瘦身,解决.vmdk文件只增不减的问题。通过清理系统垃圾、使用零填充空闲空间,并利用vmware-toolbox-cmd或vmware-vdiskmanager工具进行压缩,可有效回收被无效占用的磁盘空间。文章还提供了常见错误解决方案和预防性维护建议,帮助用户高效管理虚拟机存储。

sea99的博客 298

Revit二次开发之获取钢筋(Rebar)的线(Line)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

qq_25986069的博客 1312

关于hashlib哈希算法的一些个人笔记

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。 hashlib提供了常见的摘要算法,具体包括md5、sha1、sha224、sha256、sha512等,我们一般用的比较多是md5。注意加密是单向的。 通过hashlib,可以把任意长度的字符串转换成固定长度的加密串,通常我们一般用hexdigest(),也就是...

房馥的技术博客 706

Vivado工程备份实战:两种方法快速迁移Block Design(附路径避坑指南)

本文详细介绍了Vivado工程中Block Design(BD)备份与迁移的两种核心方法:文件夹直接复制法与TCL脚本生成法。针对FPGA工程师在项目迁移或团队协作时常见的IP丢失、路径报错等问题,提供了从原理到实战的操作指南与路径避坑策略,确保设计可复现与高效协作。

pz890123的博客 1311

哈希表(Hash表)——个人笔记

记录哈希表的学习。

dyamoo的博客 594

数据分享:中国历年省、市、县行政区划shp(1949~2023年共计75年)

中华人民共和国县级以上行政区沿革》(三册,1949-1983年)“The Atlas of Changes of Administrative Regions of China”;《中华人民共和国行政区划沿革地图集》The yearly publications of “The Administrative Regions”, 1985-2014;每年的出版行政区划简册(1985-2014年)行政区划网:www.xzqh.org。行政区划网:www.xzqh.org。

J_Giser的博客 3694

深度学习中常用的几种卷积(下篇):膨胀卷积、可分离卷积(深度可分离、空间可分离)、分组卷积(附Pytorch测试代码)

膨胀卷积也称为扩张卷积或空洞卷积,一般可通过对标准二维卷积的卷积核设置合适的膨胀率(具体地指卷积核元素之间的距离)实现。合理利用膨胀卷积可在不引入其他参数的同时,扩大输出中元素的感受野,提高特征的全局表示能力。下面通过展示几个不同膨胀率下的卷积核大小以及感受野变化情况,可以更直观的理解:图中灰色为输入,蓝色为卷积核,黄色为输出。1)dilation=1:表示卷积核元素之间距离为1,使用0进行大小为dilation-1=0的填充(这是默认情况),因此。

NorthSmile的博客 9014

【Python个人学习笔记】--- 哈希(hash)

python中内置有一个名字叫做hash(o)的函数。 接受一个不可变类型的数据作为参数。 返回结果是一个整数。 哈希, 是一种算法。其作用就是提取数据的特征码(类似指纹)。 相同的内容得到相同的结果。 不同的内容得到不同的结果。 在python中,设置字典的键值对时,会首先对key进行hash,决定如何在内存中保存字典的数据,以方便后续对字典的操作:增、删、改、查、 ...

Siren‘s blogs 2178

Educoder:爬虫实战——求是网周刊文章爬取

第1关:获取新闻url importrequests importre defgeturls(): #**********Begin**********# url='http://www.qstheory.cn/dukan/qs/2014/2019-01/01/c_1123924172.htm' headers={ 'User-Agent':'Mozilla/5.0(Linux;Android6.0;Nexus5Buil...

weixin_46026136的博客 5254

个人哈希表笔记

本人正在学习C++,所以这个笔记会涉及哈希表的简单介绍,以及C++中unordered_map的使用方面

2301_79528561的博客 1146

华为OD机试 - 猴子吃桃 - 二分查找(Java 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3850

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

个人笔记·进制哈希

首先设一个进制数base,并设一个模数mod,而哈希其实就是把一个数转化为一个值,这个值是base进制的,储存在哈希表中,注意一下在存入的时候取模一下即可。 比如说现在有一个字符串orzc,枚举这个字符串的每一位,与base相乘得到ans,然后mod一下,就得到orzc的哈希值,但是哈希有一个很大的弊端:哈希冲突。 什么是哈希冲突呢? 就比如说orzc的哈希值是233,而orzhjw的哈希值也是233。 那么我们在查询的时候代码会认为这两个字符串是相同的,但显然这两个字符串是不同的。 减少哈希冲突的方法很多

萧瑟的博客 380

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算与数据结构篇 - 哈希算法 (Hash)

计算与数据结构篇 - 哈希算法 (Hash) 哈希算法的定义和原理非常简单,基本上一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 构成哈希算法的条件: 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法) 对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大...

stark张宇 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

哈希算法

对于哈希算法,在我们平时的开发中,都是基本上拿来就用就行了,所以这节我们将重点放在如何使用,并不进行哈希算法的原理剖析和如何设计一个哈希算法的讲解. 什么是哈希算法? 将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值(散列值).一个优秀的哈希算法需要满足: 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)...

Tattoo的博客 4万+

识别哈希算法类型hash-identifier

识别哈希算法类型hash-identifier hash-identifier是一款哈希算法识别工具。通过该工具,用户可以识别哈希值所使用的哈希算法。确定算法后,就可以采用对应的工具进行xx。执行该命令如下所示: root@daxueba:~# hash-identifier 输出信息如下所示: ############################################...

大学霸__IT达人 1967

必学算法——哈希算法

哈希算法是必须掌握的一种基础算法,在一些比较出名的竞赛acm、蓝桥杯,并且在一些公司面试题中都可能会出现,而且作为简单题我们必须要拿下,所以我们要引起重视,下面让我们来深入了解哈希算法。哈希算法,也称为散列算法,是一种数学函数或算法,它能够将任意长度的数据(称为“消息”)转换为固定长度的字符串(称为“哈希值”或简称“哈希”)。学习算法是一个很艰难,漫长的过程,我们要克服一切困难,学习算法本就是由易到难,我相信通过我们坚持不懈的努力一定能理解并熟练掌握其中细节,加油,我相信你一定能行。

ycs66的博客 5289

【18】哈希算法

18 哈希算法1. 什么是哈希算法?2. 哈希算法的常见应用有哪些?3. 思考4. 参考资料5. 声明 1. 什么是哈希算法? 定义 将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 如何设计一个优秀的哈希算法? 1)单向哈希: 从哈希值不能反向推导出哈希值(所以哈希算法也叫单向哈希算法)。 2)篡改无效: 对输入敏...

Jock2018的博客 1601
上一篇: B树与B+树个人笔记
下一篇: 数据库事务个人笔记
VLoye
博客等级 码龄10年 9粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值