【问题标题】:Hashtable and the bucket array哈希表和桶数组
【发布时间】:2014-01-21 14:27:00
【问题描述】:

我将其读入哈希表,我们有一个桶数组,但我不明白该桶数组包含什么。

它是否包含散列索引?条目(键/值对)?两者都有?

这张图,对我来说,不是很清楚:

(reference)

那么,哪个是桶数组?

【问题讨论】:

标签: algorithm data-structures


【解决方案1】:

数组下标大多等价于哈希值(嗯,哈希值修改了数组的大小),所以根本不需要将它存储在数组中。

至于实际数组包含什么,有几个选项:

  • 如果我们使用separate chaining:

    • 对具有该哈希值的所有元素的链表的引用。所以:

      LinkedList<E>[]
      
    • 链表节点(即链表的头部) - 类似于第一个选项,但我们只是直接从链表开始,而不通过单独引用它来浪费空间。所以:

      LinkedListNode<E>[]
      
  • 如果我们使用open addressing,我们只是存储实际元素。如果有另一个元素具有相同的哈希值,我们使用一些可重现的技术来找到它的位置(例如,我们只是尝试下一个位置)。所以:

    E[]
    
  • 可能还有其他一些选项,但以上是最著名的,分离链是最受欢迎的(据我所知)

* 我假设对泛型和 Java/C#/C++ 语法有些熟悉 - E 这里只是我们要存储的元素的类型,LinkedList&lt;E&gt; 表示 LinkedList 存储类型为 @987654329 的元素@。 X[] 是一个包含 X 类型元素的数组。

【讨论】:

  • 所以我们可以说,通过哈希函数返回的索引,我们找到存储在桶数组中的条目......
  • @xdevel2000 是的但是你一般不直接用,一般用hashCode % buckets.Length找索引。
  • @xdevel2000 单独的链接将返回与哈希值匹配的元素的 list(修改数组大小),而对于开放寻址,您可能需要环顾四周找到正确的元素(是的,这有点模糊,但澄清它需要广泛的解释)。对于单独的链接,索引处的列表 = 元素的哈希值将包含该元素。而且,对于开放寻址,我们还可以通过开始查看该索引来找到它。我不会说你的说法完全正确,因为在那个索引处,SC 有一个列表,而 OA 不一定是那个元素。
【解决方案2】:

桶数组中的内容很大程度上取决于哈希表中存储的内容,以及冲突解决策略。

当您使用linear probing 或另一个open addressing technique 时,您的存储桶表存储键或键值对,具体取决于您的哈希表的使用情况 *

当您使用 separate chaining technique 时,您的存储桶数组会存储成对的键和链接结构的标头(例如链表)。

关于桶数组要记住的重要一点是,它在哈希码和一组零个或多个键之间建立了映射。换句话说,给定一个哈希码和一个桶数组,你可以在恒定时间内找出与这个哈希码相关的可能键是什么(枚举候选键可能是线性的,但找到第一个需要是常数时间,以满足哈希表对平均分摊常数时间插入和常数时间搜索的性能保证。

* 如果您的哈希表用于检查成员资格(即它表示一组键),则桶数组存储键;否则,它存储键值对。

【讨论】:

    【解决方案3】:

    实际上,已计算(通过散列键)进入该存储桶的条目的链接列表。

    【讨论】:

      【解决方案4】:

      在 HashTable 中,大多数时候都会发生冲突。那是当不同的元素具有相同的哈希值时。具有相同 Hash 值的元素存储在一个桶中。因此,对于每个哈希值,您都有一个存储桶,其中包含具有该哈希值的所有元素。

      【讨论】:

        【解决方案5】:

        桶是键值对的链表。哈希索引是一个 告诉“哪个桶”,而键值对中的“键”就是告诉“那个桶中的哪个条目”的那个。 也签出 hashing in Java -- structure & access time,我已经在那里告诉了更多细节。

        【讨论】:

          猜你喜欢
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-12
          • 2017-02-18
          • 1970-01-01
          • 2013-03-21
          • 2010-10-29
          相关资源
          最近更新 更多