布隆過濾器(Bloom Filter)與Hash算法


  Hash算法在應用中又稱為指紋(fingerprint)或者摘要(digest)算法,是一種將任意長度的明文串映射為較短的數據串(hash值)的算法,目前的Hash算法主要是MD5系列算法與SHA系統算法

  一個好的Hash算法需要具有四個特性,即正向快速 ,逆向困難,輸入敏感 ,沖突避免

    正向快速 :給定明文和 Hash 算法,在有限時間和有限資源內能計算得到 Hash 值

    逆向困難:給定Hash 值,在有限時間內難以逆推出明文

    輸入敏感:原始輸入信息發生任何改變,新產生的 Hash 值都應該出現很大不同

    沖突避免:很難找到兩段內容不同的明文,使得它們的 Hash 值一致 。沖突避免也叫做抗碰撞性,分為強抗碰撞性與弱抗碰撞性。如果給定明文前提下,無法找到與之碰撞的其他明文,則算法具有弱抗碰撞性;如果無法找到任意兩個Hash 碰撞的明文,則稱算法具有強抗碰撞性

  由於Hash可以將任意內容映射到一個固定長度的字符串,而且不同內容映射到相同串的概率很低 。因此,這就構成了一個很好的“內容→索引”的生成關系。對於給定的內容與存儲數組,可以通過構造合適的Hash函數,使內容計算得出的Hash值不超過數組的大小,從而實現快速的基於內容的查找,用以判斷"某個元素是否在一個集合內"的問題。但是將映射的Hash值限制在數組大小的范圍內,會造成大量的Hash沖突,從而導致性能的急速下降,所以人們基於Hash算法設計出了布隆過濾器

  布隆過濾器采用了多個 Hash 函數來提高空間利用率。 對同一個給定輸入來說,多個Hash函數計算出多個地址,分別在數組的這些地址上標記為1,進行查找時,進行同樣的計算過程,並查看對應元素,如果都為1,則說明較大概率是存在該輸入,如下圖所示,根據內容執行Hash1,Hash2,HashK等函數,計算出h1,h2,hk等位置,如果這些位置全部是1,則說明abc@gmail.com有很大概率存在

  

  之所以說有很大概率,是因為不管是單一的Hash算法還是布隆過濾器,其思想是一致的,都是基於內容的編碼,但是由於存儲限制,都可能存在沖突,即兩種方法都可能存在誤報的問題,同時都不會存在錯報的問題。不過在應用中布隆過濾器的誤報率遠低於單一Hash算法的誤報率


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM