Data structures 冲突处理中的开放寻址是什么意思?

Data structures 冲突处理中的开放寻址是什么意思?,data-structures,Data Structures,冲突发生在散列中,有不同类型的冲突避免。 1) 锁链 2) 公开寻址等。, 什么是开放寻址以及如何在开放寻址中存储索引。计算-冲突是当数据集U中两个或多个数据元素的结果哈希映射到哈希表中的相同位置时的一种情况,称为哈希冲突。在这种情况下,两个或多个数据元素将有资格存储/映射到哈希表中相同的位置 开放寻址也称为封闭哈希是一种通过探测或搜索数组中的其他位置来解决冲突的方法,直到找到目标记录或未使用的数组槽,这表明表中没有此类键 在开放寻址中,插入时,如果发生冲突,将尝试替代单元格,直到找到一个空的存

冲突发生在散列中,有不同类型的冲突避免。 1) 锁链 2) 公开寻址等。,
什么是开放寻址以及如何在开放寻址中存储索引。计算-

冲突
是当数据集U中两个或多个数据元素的结果哈希映射到哈希表中的相同位置时的一种情况,称为哈希冲突。在这种情况下,两个或多个数据元素将有资格存储/映射到哈希表中相同的
位置

开放寻址
也称为
封闭哈希
是一种通过
探测
或搜索数组中的其他位置来解决冲突的方法,直到找到目标记录或未使用的数组槽,这表明表中没有此类键

在开放寻址中,插入时,如果发生冲突,将尝试替代单元格,直到找到一个
空的
存储桶。为此,采用以下技术之一。 探测的方法有很多:
线性
二次
布谷鸟散列
(我在项目中使用过),
双散列

现在深入探讨一下你所说的
探测
是什么意思。假设我们想在哈希表中执行插入和搜索操作

插入:

当发生碰撞时,我们只是探测或转到表中的下一个插槽。 如果钥匙
未被占用
–我们将
钥匙存储在那里。
如果
已占用
–我们
继续
探测下一个插槽

搜索:

如果密钥散列到已占用的位置,并且没有匹配项, 我们探测下一个位置

a)
匹配
成功
搜索

b)
位置–
搜索不成功
搜索

c)
已占用
匹配–
继续
探测

当到达表的末尾时,探测从
开始继续进行,
直到到达原始起始位置

为了增加更多内容,在
开放寻址
中,我们不需要额外的数据结构来保存数据,因为在
封闭寻址的情况下
数据存储在一个链表中,其头指针通过一个指针引用,该指针的索引存储在我们的哈希表中


使用哈希函数为每个键计算索引。假设在线性探测中我们需要在哈希表中插入[20]

Hashtablesize=20;

void insert(string s)
{
    // Compute the index using the Hash Function
    int index = hashFunc(s);
    // Search for an unused slot and if the index will exceed the hashTableSize
    // we will roll back
    while(hashTable[index] != "")
        index = (index + 1) % hashTableSize;
    hashTable[index] = s;
}
二次探测也类似于线性探测,区别在于探测序列的迭代。在二次探测中,探测序列可以是

index = index % hashTableSize
index = (index + 1^2) % hashTableSize
index = (index + 2^2) % hashTableSize
index = (index + 3^2) % hashTableSize

您可以将计算后存储到开放寻址中的索引吗?索引是使用特定键的哈希函数计算的。例如,在线性探测中,可以像index=index%hashTableSizecan这样计算索引。如果插槽散列(x)%S已满,我可以在下面一个用于打开寻址,那么我们尝试(散列(x)+1)%S如果(散列(x)+1)%S也已满,那么我们尝试(散列(x)+2)%Scan我使用下面的一个进行开放寻址哈希。。。。如果插槽散列(x)%S已满,那么我们尝试(散列(x)+1)%S如果(散列(x)+1)%S也已满,那么我们尝试(散列(x)+2)%S如果您发现我的答案有用,您可以接受它,因为它将在将来帮助其他人。