哈希 学习笔记

参考书籍:《算法笔记》

描述: 将元素通过一个函数(hash函数 H)转换为整数,使得该整数可以尽量唯一的代表这个元素。(key 变为 H(key)

思想: 用空间换时间

对于key是整数的情况来说,常用的hash函数有直接定址法平方取中法除留余数法等。

  • 直接定址法:恒等变换:H(key) = key直接把key作为数组下标(最常见实用的)
    线性变换:H(key) = a * key+b
  • 平方取中法:取key平方的中间若干位作为hash值(很少用)
  • 除留余数法:H(key) = key % mod 把key对一个数取模的值作为hash值,一般取素数作为mod,且与表长TSize相等。

但一定会有两个数的hash值相等,这就是冲突

解决冲突的方法(1和2重新计算了hash值):

  1. 线性探测法:当得到key的hash值H(key),但表中的下标为H(key)的位置已经被占用了,这时候就检查H(key)+1是否被占用,如果没有,就使用这个位置;否则就继续检查下一位。如果在检查的过程中超过了表长,就回到表的首位继续循环,知道找到一个可以使用的位置。
    缺点: 容易扎堆,即表中连续的若干个位置都被占用,一定程度上影响效率。
  2. 平方探测法:为尽量避免扎堆,当表中下标为H(key)的位置被占时,将按以下的顺序检查表中的位置:H(key)+12、H(key)-12、H(key)+22、H(key)-22……
    如果在检查的过程中H(key)+k^2^超过了表长TSize,那么久把H(key)+K^2对表长TSize取模;
    注意:如果想避免负数的麻烦,也可以只做正向的平方探测。可以证明,如果k在[0, TSize)范围内都无法找到位置,那么当k≥TSize时,也一定无法找到位置。
  3. 链地址法:把所有的H(key)相同的key连接成一条单链表。这样可以设定一个数组Link,范围是Link[0]~Link[mod],其中Link[h]存放hash值为h的一条单链表,就可以直接把这些冲突的key用单链表连接起来,可以通过遍历这条单链表来寻找所有的hash值为h的key。

注意:可以使用STL中的map来实现hash的功能(c++11 以后可以使用unordered_map,速度更快)。

哈希图像检索是一种用于在大规模图像数据库中快速搜索相似图像的方法。在哈希图像检索中,图像被转换为哈希码,然后通过比较哈希码的相似性来确定图像之间的相似度。有几种常用的哈希算法可以用于图像检索,如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、付费专栏及课程。

余额充值