【问题标题】:How to implement a hash function for a HashSet/HashMap如何为 HashSet/HashMap 实现哈希函数
【发布时间】:2015-07-06 18:13:38
【问题描述】:

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

我正在寻找一个通用的、独立于语言的示例,但您可以提供任何语言的代码或代码链接。

【问题讨论】:

    标签: algorithm data-structures hash hashmap hashtable


    【解决方案1】:

    你的选择是

    1. 为了创建哈希而强制执行命令
    2. 应用可交换的哈希算法(与顺序无关)

    如果元素数量相对较少,第一个选项可能是可行的。您可以对哈希元素进行排序,例如通过(每个元素的)哈希值,然后应用众所周知的哈希组合技术,例如将每个连续元素对哈希的贡献乘以 (SomePrime)^n。

    对于第二个选项,简单地将散列中每个元素的散列相加可能会提供合适的分布,因为每个元素本身的散列应该已经很好地分布了。

    【讨论】:

    • 对于上下文,Python 使用选项 #2 因为它是 frozenset hash: stackoverflow.com/questions/20832279/…
    • @orlp 我只是想以 2 为例,因为 1 不适用于大型哈希表。任何其他参考资料、示例或链接将不胜感激。
    • 在一般情况下排序是不可行的,因为我希望算法不超过 O(n)。
    • 就像我说的,如果元素数量相对较少,1 个可能是可行的。如果 n
    【解决方案2】:

    为数据结构引入新字段,您可以在其中保留哈希库。 在每次向 hashmap/hahset 添加元素时,如果元素尚不存在,则执行 hashbase += element.hash 之类的操作。使用此哈希库进行哈希计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2011-01-19
      • 2015-10-14
      • 2021-04-06
      相关资源
      最近更新 更多