哈希算法及应用【学习笔记】

好久没写博客了,最近在找工作,把找工作中遇到的问题在这里记录一下,也当是放个松吧,后面估计会开算法、数据结构、操作系统、计算机网络、数据库几个专题吧,把面试过程中学到的东西都记录一下,这篇就主要记录一下Hash相关的知识。这篇主要记录一下什么是哈希,哈希有什么用,哈希怎么实现,七七八八的东西。

一、哈希是什么

哈希又叫散列,主要通过一个函数将不定长的输入映射成一个定长的输出,这个映射而成的输出又被称为散列值。实际上就是一个函数映射,我们输入的是想进行变换的数据,也就是函数的自变量,它的取值范围是没有限制的,也就是上面说的不定长的,而函数的值域是有限的,也就是上面说的定长输出,这就是哈希的基本特点。通过上面的描述也不难得到以下几个特点:
1.由于哈希是将没有范围限制的数据转换成固定范围的散列值,因此必然存在不同的输入有相同的输出的情况。(专业点说叫做哈希冲突)
2.基于特点1,我们又可以知道,如果只给我们哈希后的结果是没有办法推出具体的输入是什么的。因为一个散列值可能对应多个输入。
3.如果两个输入的哈希值不同,那么这两个输入一定不同。
其实这些特点,有点废话了,因为这其实就是函数的基本特点。那么根据这些特点我们能做些什么事情呢?

二、哈希有什么用

哈希的用途我在这里会把他们总结成两类,一个是用作存储,另一个则是用来做信息安全。这一节就简单写一下吧,后面会有一个展开。
1.哈希做存储
首先,当然是很常用的hashtable,hashmap了,他们的特点就是查找非常快,如果不考虑哈希冲突的问题,它查找的时间复杂度仅仅是O(1)。这个可以用支持随机访问的容器来实现,把要存的数据映射成容器的索引下标就OK啦。
除了这两种数据结构,分布式中的负载均衡,布隆过滤器等也是用哈希实现的,这里我也把他们算作存储啦。
2.哈希算法做信息安全
信息安全上主要了解到的就是密码加密以及数据校验,就不太具体聊了,目前还没有太深入的了解,简单介绍一下吧。
对于密码我们只希望用户自己知道,不要再有第二个人知道,因此需要在传输以及存储过程中进行加密,一般就会选择hash算法,因为它不可逆,我们不能从hash值反推出原始密码,这就很nice。
在数据校验上主要是防止数据在传输过程中有差错或者被恶意篡改,因此会用hash值进行校验,这类hash函数比较灵敏,数据稍微变动,其散列值变动就会很大。

三、哈希是怎么实现的

从上面的介绍也知道了,hash是通过函数实现的,那么常见的构造hash函数的方法有哪些呢?
1.数字分析法
如果要存储的关键字的集合已知,且位数比哈希表多,则可以选取较为均匀的若干位,构成hash地址,比如一个关键字集合由n为十进制数组成,其中有几位的分布均匀这里主要指0~9出现的概率几乎相同,那么就可以用这几位做一个组合直接作为哈希值。(缺点 :必须知道key的全部取值,才能进行分析)
2.平方取中法
对关键字进行平方,然后取平方的中间几位作为哈希值,对于字符串数据要预先进行编码。这里主要是考虑到平方后的中间几位与每一位关键字都相关,因此产生hash冲突的概率会小很多。
3.分段叠加法
将关键字按照哈希表的长度将关键字分成相等的及部分,如哈希表长度为10,则将关键字每两位进行一个分隔。分割后可以选择直接叠加或者移位叠加(把偶数位反转)。
直接叠加的例子,key:123456,哈希表长度100
(12+34+56)%100 =(102)%100=2
移位叠加的例子
(12+43+56)%100 = (111)%100=11
4.除留取余法
除留取余法主要根据哈希表的长度,选取小于等于其长度的最大素数作为哈希函数
f(key) = key%m
5.伪随机数法
采用一个伪随机函数来做哈希函数

这篇就简单的写这么多,下篇想写一下用hash做负载均衡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈希图像检索是一种用于在大规模图像数据库中快速搜索相似图像的方。在哈希图像检索中,图像被转换为哈希码,然后通过比较哈希码的相似性来确定图像之间的相似度。有几种常用的哈希算法可以用于图像检索,如SIFT、SURF、ORB等特征提取算法\[1\]。此外,还有一些基于哈希的图像检索方,如VLAD、BOF等,可以用于处理海量数据的图像检索\[1\]。 在哈希图像检索中,可以使用不同的方来计算图像之间的相似度。一种常用的方是通过比较图像的颜色、纹理和局部特征来计算相似度\[2\]。另外,还可以使用KD-Tree、局部敏感哈希(LSH)和原子哈希函数等方来在高维空间中进行图像检索\[2\]。 此外,还有一种基于监督学习和核的Hash算法,称为KSH算法。KSH算法利用核主要是为了解决线性不可分问题,通过监督学习学习到更有区分度的哈希值,从而降低特征维数\[3\]。 总之,哈希图像检索是一种用于在大规模图像数据库中快速搜索相似图像的方,它可以通过提取图像特征和计算相似度来实现。不同的哈希算法和方可以用于不同的图像检索任务。 #### 引用[.reference_title] - *1* *3* [图像检索传统算法学习笔记](https://blog.csdn.net/qq_39858278/article/details/83895342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [8月23日计算机视觉理论学习笔记——图像检索](https://blog.csdn.net/Ashen_0nee/article/details/126467437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值