Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash 开散列和闭散列的含义_Hash - Fatal编程技术网

Hash 开散列和闭散列的含义

Hash 开散列和闭散列的含义,hash,Hash,开放散列(单独链接): 在开放哈希中,键存储在附加到哈希表单元格的链接列表中 闭合哈希(开放寻址): 在封闭哈希中,所有键都存储在哈希表中,而不使用链表 我无法理解为什么它们被称为开放、封闭和分离。有人能解释一下吗?使用“关闭”与“打开”反映了我们是否被锁定在使用某个位置或数据结构(这是一个非常模糊的描述,但希望其他描述有所帮助) 例如,“open addressing”中的“open”告诉我们一个对象将存储在哈希表中的索引(aka.address)并不是完全由其哈希代码决定的。相反,索引可能会

开放散列(单独链接):

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

闭合哈希(开放寻址):

在封闭哈希中,所有键都存储在哈希表中,而不使用链表

我无法理解为什么它们被称为开放、封闭和分离。有人能解释一下吗?

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

例如,“open addressing”中的“open”告诉我们一个对象将存储在哈希表中的索引(aka.address)并不是完全由其哈希代码决定的。相反,索引可能会根据哈希表中已有的内容而有所不同

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

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


简言之,“closed”总是指某种严格的保证,比如我们保证对象总是直接存储在哈希表中(closed hashing)。然后,与“closed”相反的是“open”,因此如果您没有这样的保证,则该策略被视为“open”。名称open addressing指的是元素的位置(“地址”)不是由其散列值确定的。(此方法也称为闭合散列)

独立链接中,每个bucket都是独立的,并且具有某种具有相同索引的ADT(列表、二进制搜索树等)。 在一个好的哈希表中,每个bucket都有零个或一个条目,因为我们需要O(1)级的操作来进行插入、搜索等


这是一个<强>单独链接< /强>使用C++,用一个简单的散列函数,使用mod运算符< /p> ,你有一个数组,它是“哈希表”。 在开放散列中,数组中的每个单元格都指向包含冲突的列表。哈希为链表中的所有项目生成了相同的索引


在封闭散列中,每件事情都只使用一个数组。将碰撞存储在同一数组中。诀窍是用一些聪明的方法从一个碰撞跳到另一个碰撞,直到你找到你想要的。我们应该补充一点,开放散列(单独链接)并不局限于链表,链表对缓存不友好,并且对O(n/2)行为的冲突攻击不敏感。您也可以使用树或排序数组来处理冲突的存储桶。downvote由于信息冲突:您说“open”和“closed”是同义词,然后在结尾:“closed”的反义词是“open”@MarwenTrabelsi我从未说过“closed”和“open”是同义词。这就解释了为什么“closed hashing”和“open addressing”是同义词。有人能提供一个来源来证明这是正确的历史词源吗?事实上,我们从不在哈希表中存储键,我们获取一个元组(键,值)并使用键计算值应该存储在哪里。实际上,我们将这些值存储在哈希表中