簡體   English   中英

如何為HashSet / HashMap實現哈希函數

[英]How to implement a hash function for a HashSet/HashMap

如果我需要散列整個HashSet<T>HashMap<T, U> ,其中T已經實現了一些哈希算法,我該怎么做? 請注意,我不是在詢問散列表的散列元素,我在談論散列整個數據結構本身。 對於像TreeSet這樣的有序集合,這並不太困難,但由於散列表的元素順序沒有明確定義,因此這更加棘手。 在一般情況下對元素進行排序是不可行的,因為算法應該不超過O(n)時間。

我正在尋找一個通用的,獨立於語言的示例,但您可以提供代碼或鏈接到任何語言的代碼。

你的選擇是

  1. 為了創建哈希而強制執行訂單
  2. 應用可交換的哈希算法(獨立於順序)

如果元素的數量相對較小,則第一選項可能是可行的。 您可以例如通過(每個元素的)散列值對散列元素進行排序,然后應用眾所周知的散列合並技術,例如將每個連續元素對散列的貢獻乘以(SomePrime)^ n。

對於第二種選擇,簡單地將散列中的每個元素的散列一起添加可以提供合適的分布,因為每個元素本身的散列應該已經非常好地分布。

為數據結構引入新字段,您可以在其中保留hashbase。 在每個元素添加到hashmap / hahset時執行類似hashbase + = element.hash的事情,如果元素還沒有。 使用此hashbase進行哈希計算。

暫無
暫無

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

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