Hash基础相关知识点总结
Posted qijunhui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hash基础相关知识点总结相关的知识,希望对你有一定的参考价值。
1 哈希表(Hash Table)
说明:一种特殊的数据结构。
特点:可以快速实现查找、插入和删除。
1.1 基本思想
数组的特点:寻址容易,但插入和删除困难。
链表的特点:寻址困难,但插入和删除容易。
哈希表即结合以上两个的优点,创造而成。
1.2 基本概念
- 哈希表:即散列表,是根据关键字(码值)而直接进行访问的数据结构,也就是Map。
- 哈希函数:即散列函数,是Hash表的映射函数。
- 标准定义:若关键字为$k$,则其值存放在$f(k)$的存储位置上。由此,不需要比较便可直接取得所查记录,称这个对应关系$f$为哈希函数,按这个思想建立的表为哈希表。
2 哈希算法
哈希算法并不是一个特定的算法,而是一类算法的统称。
哈希算法也称散列算法,一般满足$f(data)=key$,即输入任意长度的$data$数据,经哈希算法处理后输出一个定长的数据$key$。
简单地讲,哈希算法可类比为一个伪随机数生成器,实现“明文→密文”的转化,即一段信息经哈希算法映射为固定长度的数字串。
性质:
- 不可逆,即知道$x$的Hash值无法求出$x$。
- 无冲突,即知道$x$,无法求出一个$y$,使$x$与$y$的Hash值相同。
“碰撞”即不同的输入数据对应了相同的哈希值。
注意:“碰撞”并没有违背“无冲突”性,一个好的哈希算法应有较好的抗冲突性。
海明距离:在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称为海明距离。即两个二进制串异或结果中1的个数。
常用的哈希算法见关于Hash的几种常用算法。
3 局部敏感哈希
局部敏感哈希类似于一种空间域转换思想。
特点:保持数据的相似性。
如果两个文本原有数据空间相似,则经哈希转换后也具有相似性;相反,若两个文本不相似,则经转换后也不相似。
局部敏感哈希是相对的,我们所讲的保持数据的相似性不是说包吃100%的相似度,而是保持最大可能的相似度(降维后)。
3.1 Shingling
Shingling是一种去重算法。
将待查询的字符串集进行映射,映射到一个集合里,如字符串“abcede”映射到集合“(a, b, c, d, e)”中。
注意集合中的元素是无重复的,这一步就叫Shingling,意即构建文档中的短字符串集合,即Shingle集合。
3.2 SimHash
传统的Hash函数是将原始内容尽量均匀、随机地映射为签名值,对于传统的Hash函数来讲,如果两个签名值相等,则说明原始内容在一定程度(一定概率)上是相同的;如果不相等,除了说明原始内容不相同外,不提供任何信息。
传统的Hash函数是无法在签名值的维度上来衡量原始内容相似度的,而SimHash本身属于一种局部敏感哈希,它产生的Hash签名在一定程度上可以表征原内容的相似性。
对于文本去重,有很多NLP相关的算法可以在很高精度上来解决。但是若要处理大数据维度上的文本去重,这就对算法的效率有很高的要求。
SimHash最大的优点:
- 可以将文本映射为数字。
- “文本相似”等同于“签名相似”。
以上是关于Hash基础相关知识点总结的主要内容,如果未能解决你的问题,请参考以下文章