Hash基础相关知识点总结

1  哈希表(Hash Table)

说明:一种特殊的数据结构。

特点:可以快速实现查找、插入和删除。

1.1  基本思想

数组的特点:寻址容易,但插入和删除困难。

链表的特点:寻址困难,但插入和删除容易。

哈希表即结合以上两个的优点,创造而成。

1.2  基本概念

  • 哈希表:即散列表,是根据关键字(码值)而直接进行访问的数据结构,也就是Map。
  • 哈希函数:即散列函数,是Hash表的映射函数。
  • 标准定义:若关键字为$k$,则其值存放在$f(k)$的存储位置上。由此,不需要比较便可直接取得所查记录,称这个对应关系$f$为哈希函数,按这个思想建立的表为哈希表。

2  哈希算法

哈希算法并不是一个特定的算法,而是一类算法的统称。

哈希算法也称散列算法,一般满足$f(data)=key$,即输入任意长度的$data$数据,经哈希算法处理后输出一个定长的数据$key$。

简单地讲,哈希算法可类比为一个伪随机数生成器,实现“明文→密文”的转化,即一段信息经哈希算法映射为固定长度的数字串。

性质:

  1. 不可逆,即知道$x$的Hash值无法求出$x$。
  2. 无冲突,即知道$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最大的优点:

  1. 可以将文本映射为数字。
  2. “文本相似”等同于“签名相似”。

猜你喜欢

转载自www.cnblogs.com/qijunhui/p/9879206.html