1. 程式人生 > >Hash基礎相關知識點總結

Hash基礎相關知識點總結

直接 最大 我們 哈希表 位數 htm 3.2 海明距離 文本去重

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. “文本相似”等同於“簽名相似”。

Hash基礎相關知識點總結