簡體   English   中英

如何生成唯一的哈希值?

[英]How to generate unique hash values?

我有1000萬條記錄。 每個記錄有大約100個字段。 讀取記錄時,我想確定該記錄是否與我先前閱讀的另一條記錄重復。 重復檢查的標准基於20個字段,並檢查是否完全相同。 我可以獲取新記錄,並與20個字段中的每個字段的所有先前記錄進行比較。

我正在考慮的另一種方法是將20個字段散列為單個字段,並將散列與所有先前記錄的散列進行比較。 為此,我需要一個可以賦予我唯一性的哈希函數。 我知道有一些函數,例如SHA512,SHA224等。哪個哈希函數適合我的用例?

問候,
亞什

您追求的是“ 完美哈希 ”。 有一種經典的方法,您可以分兩個步驟構造哈希函數,即,通過組成兩個哈希函數。 該結構有些復雜,但是您可能需要對其進行研究。

我之前沒有做過這么大規模的工作,但我會分享我的經驗,希望能有所幫助。 這是一個簡單的解決方案,由於您使用java標記發布了此代碼,因此我假設您已經掌握了基礎知識。 解決方案將分為3部分:

  1. 將20個參數連接到一個長字符串中,以使用java.lang.String類上的hash方法計算一個簡單的哈希。
  2. 通過選擇適當的分隔符(例如制表符,換行符,返回符,甚至是唯一的長字符串)來消除潛在的沖突,這些字符不太可能出現在記錄中。 示例:“堆棧交換中不存在字符串可能會回答1234abcd”。 您可以使它具有整數,字符串,您喜歡的報價以及任何您想要的東西。 使用分隔符連接20個字段。 這一步需要了解您在那20個字段中看到的數據,如果它們全部都是整數,則像'a'這樣的簡單字符就可以正常工作。
  3. 計算記錄的哈希值並將其散列在HashSet中。 這樣,對於每條新記錄,您都可以檢查以前是否看過它,並刪除它或對它采取任何措施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM