如何为HashSet / HashMap实现哈希函数

时间:2015-04-28 04:12:51

标签: algorithm data-structures hash hashmap hashtable

如果我需要哈希整个HashSet<T>HashMap<T, U>,其中T已经实现了一些哈希算法,我该怎么做?请注意,我不是在询问散列表的散列元素,我在谈论散列整个数据结构本身。对于像TreeSet这样的有序集合,这并不太困难,但由于散列表的元素顺序没有明确定义,因此这更加棘手。在一般情况下对元素进行排序是不可行的,因为算法不应超过O(n)时间。

我正在寻找一个与语言无关的通用示例,但您可以提供代码或指向任何语言代码的链接。

2 个答案:

答案 0 :(得分:3)

您的选择是

  1. 为了创建哈希值而执行订单
  2. 应用可交换的哈希算法(独立于订单)
  3. 如果元素的数量相对较少,则第一个选项可能是可行的。您可以对哈希元素进行排序通过哈希值(每个元素),然后应用众所周知的哈希组合技术,例如将每个连续元素对哈希的贡献乘以(SomePrime)^ n。

    对于第二个选项,简单地将散列中每个元素的散列一起添加可以提供合适的分布,因为每个元素本身的散列应该已经非常好地分布。

答案 1 :(得分:0)

为数据结构引入新字段,您可以在其中保留hashbase。 在每个元素添加到hashmap / hahset时执行类似hashbase + = element.hash的事情,如果元素还没有。使用此hashbase进行哈希计算。