【问题标题】:Using linked list to solve hash conflicts, what's the next step to identify the item用链表解决hash冲突,下一步怎么识别item
【发布时间】:2012-08-05 02:53:59
【问题描述】:

我正在使用一个非常简单的哈希算法,将一个字符串映射到一个 32 位整数,假设哈希是坏的,stringB 和 stringA 的数字都是 123,现在我应该遍历链表,尝试比较所有项目我正在寻找的项目,直到我找到合适的?

【问题讨论】:

    标签: algorithm hash linked-list theory


    【解决方案1】:

    是的,每个桶的链接列表是一种方法:如果项目在列表中,则完成;否则,在列表末尾添加一个新项目。

    另一种是循环尝试表中的下一个bucket,直到找到一个空的。

    【讨论】:

    • 第三种方法是使用不同大小的哈希表(尽管这仅在哈希等价是由于不幸的模数造成的情况下才有用)。
    【解决方案2】:

    假设您的散列策略基于使用 LinkedList 的封闭散列,并且您的 linled 列表排序基于插入顺序,我将遍历项目并在内容上比较它们,如果您想保留 @ 可能与 if ( string1.compareTo(string2) == 0 ){ ... 987654322@ 用于散列。

    【讨论】:

      【解决方案3】:

      没错。你也可以参考这个网站http://www.strchr.com/hash_functions(当然除了维基!)

      搜索映射到特定存储桶的元素可以有不同的变体 - 您可以拥有多级哈希表,甚至是二叉搜索树,而不仅仅是链表!

      【讨论】:

        【解决方案4】:

        要处理哈希冲突,一种合适的方法是重新哈希冲突(后续)值。很难估计原始哈希函数的运行时行为,这意味着冲突的发生是未知的。使用另一个散列函数散列冲突值并将它们存储在二级表中仍然是总体上最佳的时间查找。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-26
          • 1970-01-01
          • 2010-11-29
          • 2015-07-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多