哈希值定义,哈希值是怎么生成的
我是搬运工
原文链接:https://www.zhihu.com/question/21801702
作者:doge
链接:https://www.zhihu.com/question/21801702/answer/679363833
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
hash值是通过一个计算函数把难以比较的字符串或者其他类型的数据映射成一个整数,最常用的就是映射a~z的hash值,变成hash[(str(i)-‘a’]这个数是一个十进制数,这个十进制数把它映射到0-25,也就是数组下标,但通常来说是映射成1-26,因为方便计算,这是最简单的hash值,然后这个hash值映射成下标,这在算法题里面经常会出现,或者说可以将一个数据看成一个P进制数,
还是说上一个例子,如果是字符串对比的话,我们可以把这26个字母看成一个26进制的数,一般的话任意子串的hash我们一般使用前缀和的方式,这里暂时不展开了。那么这个数怎么映射呢?就是把字符串出现的字母都取一遍然后去当成一个26进制算,这样得到的hash值发生冲突的概率就比较低,因为转换为的数一定是一个唯一值,比如要计算abc的值,那就是(123)26=1*262+2*261+3这个计算出来的数就是hash值
现在下结论:hash值是通过一个f(hash)计算出一个整数,然后当查找一个数据或者字符串的时候就将计算出来的整数进行对比,只用看整数相不相等就可以,而不用去暴力O(n)(如果是要对比n个数那就是O(n^2)了,所以,hash值就是为查找算法,提供一个优秀的O(1)复杂度的解决方案(hash的开销主要是对函数进行计算)另外hash值在加密问题里也很重要,通过一种不可知的hash算法将hash值计算出来然后校验也是一种应用方式同时,hash在缓存机制的处理上也很优秀
hash把任意长度的输入(又叫做预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
哈希值定义,哈希值是怎么生成的相关推荐
- ruby 生成哈希值_Ruby哈希值和可变的默认值
ruby 生成哈希值 Ruby's Hash object is an associative data structure used to store key-value pairs. Many l ...
- ML之Hash_HamMingDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用汉明距离算法进行判别
ML之Hash_HamMingDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用汉明距离算法进行判别 目录 输出结果 代码实现 相关文章 ML之相似度计算: ...
- ML之Hash_EditDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用编辑距离算法进行判别
ML之Hash_EditDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用编辑距离算法进行判别 目录 输出结果 代码实现 相关文章 ML之相似度计算:图像数 ...
- 哈希表中哈希值的计算方法
哈希表是一个数组 哈希函数将任意类型一个键转换为数组中的索引,一般来说键和索引应为一一对应的关系,但是现实过程中很难达到这种关系所以就会产生哈希冲突,哈希冲突是指不同的键通过相同的哈希函数最终转换 ...
- switch……case里的case能不能同时定义多个值呢?
在C#环境里,switch--case里的case能不能同时定义多个值呢? 下面这样写行吗? int aa = Convert.ToInt16(Request.QueryString[" ...
- 现代密码学5.1--哈希函数定义
现代密码学5.1--哈希函数定义 密码学的假设 抗碰撞哈希函数定义 与数据结构中定义的哈希函数的不同 哈希函数的密钥 安全性:抗碰撞哈希函数>抗二次原像/抗目标碰撞哈希函数>抗原像哈希函数 ...
- python函数参数定义顺序_Python函数定义-位置参数-返回值
原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...
- 斗地主AI算法——第四章の权值定义
第一章业务逻辑结尾部分我提到了权值的计算方法: ①每个单牌都有一个基础价值②组合牌型的整体价值与这个基础价值有关,但显然计算规则不完全一样.③整手牌可以分成若干个组合牌,但分法不唯一. 当时,我说了① ...
- 带你学C带你飞 | printf函数 | 变量 | 常量和宏定义 | 数据类型 | 取值范围 | 字符串 | 运算符
文章目录 一.printf函数 1.printf函数 2.printf函数课后作业 二.变量 1.变量 2.变量课后作业 三.常量和宏定义 1.常量和宏定义 2.常量和宏定义的课后作业 四.数据类型 ...
- 电视红外/蓝牙遥控器键值定义和适配
电视遥控器适配和常见问题 遥控器键值适配 遥控器键值适配 一般来说,遥控器分蓝牙遥控器和红外遥控器.红外遥控器是指遥控器通过红外发射器把信号进行发射,接收设备则通过红外接收器进行信号接收:蓝牙遥控器是 ...
最新文章
- Hadoop集群搭建(八:Hive的安装配置)
- flume 1.7在windows下的安装与运行
- react ajax 分页,一款简单的react分页组件
- mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1'
- Firebug Lite——在没有调试工具的浏览器(如IE6-7)中调试
- CSS各种选择符的优先级
- jzoj1013-GCD与LCM【数论】
- Modbus协议栈开发笔记之七:Modbus ASCII Slave开发
- 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏
- gdb学习(一)[第二版]
- 通过DOS命令nslookup查域名DNS服务器
- rabbitmq-plugins.bat enable rabbitmq_management
- asp.net web submit链接页面_De1CTF2020的Web部分题解
- 5款优秀免费在线数据备份/存储工具
- mysql导入hdfs参数_导入数据到HDFS
- 微信小程序点击拨打电话,添加联系人,在线客服
- 天思软件常见问题汇总
- python身份证年龄计算_用python计算年龄
- 怎么从抖音上直接跳转到微信呢?
- 基于遥感影像的变化检测数据集