【问题标题】:Hash Table: Should I increase the element count on collisions?哈希表:我应该增加碰撞时的元素计数吗?
【发布时间】:2011-02-09 09:23:23
【问题描述】:

现在我的哈希表计算插入到哈希表中的每个元素的数量。我使用这个计数和哈希表的总大小来计算负载因子,当它达到 70% 时,我重新哈希它。

我在想也许我应该只计算插入的元素并填充一个空槽而不是全部。因为我使用的碰撞方法是单独的链接。因子负载不断增加,但如果可能发生一些冲突,则会在哈希表上留下大量空槽。

你可能在想,如果我有这么多的冲突,也许我没有使用最好的散列方法。但这不是重点,我正在使用一种已知的散列算法,我在我的样本数据上测试了其中的 3 个,并选择了产生较少冲突的那个。

我的问题仍然存在。我应该继续计算插入的每个元素,还是只计算填充哈希表中空槽的元素?

【问题讨论】:

    标签: hashtable hash-collision load-factor


    【解决方案1】:

    重新散列旨在减少冲突的可能性,因此系统地忽略冲突来决定何时重新散列似乎是弄巧成拙。

    最好的办法是在每个条目中保留原始的完整哈希值(当然,冲突是由对当前大小取模的哈希值决定的),并且只计算由于取模运算引起的冲突——隐含地承认如果冲突是由于不同项目的相同完整哈希值引起的,则重新散列无济于事(除非通过“重新散列”也意味着切换到不同的散列函数,但看起来这不是你的意思; -)。

    保留完整的散列值也意味着重新散列的成本更低,因为您不需要再次运行散列函数(相关程度取决于散列函数的计算成本,当然)。

    【讨论】:

    • 我已经计算了由哈希模表大小确定的索引上的冲突,而不是它自身的哈希...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2013-01-03
    • 2020-02-29
    相关资源
    最近更新 更多