开放散列和封闭散列的含义

打开哈希(单独的链接):

在打开的哈希中,键存储在链接列表中,该列表附加到散列表的单元格中。

封闭散列(Open Addressing):

在封闭散列中,所有密钥都存储在散列表本身中,而不使用链表。

我不明白为什么他们被称为开放,封闭和分离。 有人能解释吗?

“封闭”与“开放”的使用反映了我们是否被locking在使用某个位置或数据结构(这是一个非常模糊的描述,但希望其他的帮助)。

例如,“开放寻址”中的“开放”告诉我们,哈希表中对象将被存储在其中的索引(又名地址)不完全由其哈希码确定。 相反,索引可能会有所不同,这取决于散列表中已经存在的内容。

“封闭散列”中的“封闭”是指我们从不离开散列表; 每个对象都直接存储在哈希表内部数组的索引中。 请注意,这只能通过使用某种开放寻址策略来实现。 这就解释了为什么“封闭哈希”和“开放寻址”是同义词。

将其与开放散列进行对比 – 在此策略中,没有任何对象实际存储在散列表的数组中; 相反,一旦一个对象被散列,它被存储在一个与散列表内部数组分开的列表中。 “开放”是指我们通过离开哈希表获得的自由,并使用一个单独的列表。 顺便说一句,“单独列表”暗示了为什么开放哈希也被称为“单独链接”。

总之,“封闭”总是指某种严格的保证,就像我们保证对象总是直接存储在散列表(封闭散列)中一样。 那么,“封闭”的对面就是“开放”,所以如果你没有这样的保证,这个策略就被认为是“开放的”。

名称开放寻址是指元素的位置(“地址”)不由其散列值确定的事实。 (这种方法也被称为闭哈希)。

单独的链接中 ,每个桶是独立的,并且具有某种具有相同索引的条目的ADT(列表,二叉search树等)。 在一个好的散列表中,每个桶有零个或一个条目,因为我们需要O(1)的操作来进行插入,search等。

这是一个使用C ++ 分开链接的例子 ,使用mod运算符(显然,是一个不好的哈希函数)

那么,这是如此简单的理解打开和closures散列的概念,

在Open Hash中,它是指链表的属性,它指的是如果有任何索引的键已经有数据元素,我们就可以将另一个数据元素插入到同一个位置,显然它对于具有相同位置的数据是开放的已经被另一个占领了。

在Close中,如果数据获取表中的位置比没有数据可以使用该地址..

解决了……..容易呐