Data structures 哈希表中的链接和探测有什么区别?

Data structures 哈希表中的链接和探测有什么区别?,data-structures,hashtable,probing,Data Structures,Hashtable,Probing,它们是如何工作的?他们的主要区别是什么?它们各自的取舍是什么?它们的类型是什么(如果有的话)?什么时候一个比另一个好(如果有的话) PS:我已经讨论了和,但两种方法似乎都没有区别。在哈希表中使用链接和开放寻址(一种基于线性探测的简单实现)来解决冲突。每当两个不同键的哈希函数指向同一位置以存储值时,就会发生冲突 为了存储这两个值,使用本应存储在同一位置的不同键,链接和开放寻址采用不同的方法:而链接通过创建具有相同散列的值的链接列表来解决冲突;open addressing尝试找到不同的位置,以使用

它们是如何工作的?他们的主要区别是什么?它们各自的取舍是什么?它们的类型是什么(如果有的话)?什么时候一个比另一个好(如果有的话)


PS:我已经讨论了和,但两种方法似乎都没有区别。

在哈希表中使用链接和开放寻址(一种基于线性探测的简单实现)来解决冲突。每当两个不同键的哈希函数指向同一位置以存储值时,就会发生冲突

为了存储这两个值,使用本应存储在同一位置的不同键,链接和开放寻址采用不同的方法:而链接通过创建具有相同散列的值的链接列表来解决冲突;open addressing尝试找到不同的位置,以使用相同的哈希值存储值

对于开放寻址冲突解决,线性探测的一个有趣的替代方法是所谓的双重散列

出现的主要区别在于在不同条件下检索散列值的速度

让我们从as冲突解决方案开始。请注意,在计算Lisa的哈希函数后,需要从列表中获取第一个元素以获取所需的值。因此,可以访问指向列表头部的指针,然后访问值:2操作

另一方面,使用开放寻址,例如,在没有冲突的情况下,可以立即获得所需的值。也就是说,您只需要1次操作,这会更快

但是,当您的哈希表开始满时,由于冲突发生的频率更高,您的哈希表会有一个较高的值,探测将要求您在找到所需的实际值之前检查更多的哈希表位置。当负载因子约为0.8时,由于多次冲突,链接开始变得更有效:您必须探测大量空单元格,以便通过探测找到所需的实际值,而通过链接,您有一个具有相同哈希键的值列表


这只是一个简单的概述,因为实际数据、密钥的分布、使用的哈希函数以及冲突解决方案的精确实现将对您的实际速度产生影响。

谢谢您的回答。你能补充一点关于它们的工作原理和类型的细节吗?蒂娅,当然可以,但我以后还要补充这些信息。你有什么特别需要的信息吗?从您的问题中,我得知您知道它们是如何工作的。我已将问题编辑为包含
它们是如何工作的?
:D感谢您指出。添加了所需的额外信息。我将描述保持为介绍性的:关于哈希表的更多信息可以在Cormen等人的《算法简介》一书中找到