Python的哈希表算法如何处理空存储桶?

时间:2019-06-12 17:48:31

标签: python

来自Fluent Python ...

  

要获取my_dict [search_key]上的值,Python调用   hash(search_key)获取search_key的哈希值,并使用   该数字的最低有效位作为偏移量,用于查找存储桶   在哈希表中(使用的位数取决于当前大小   的表)。如果找到的存储桶为空,则会引发KeyError。

  1. 如果仅使用哈希值的最低有效位,则空存储桶和非空存储桶是否可能共享相同的最低有效位,并且由于首先遇到了空存储桶而错误地引发了KeyError ?

  2. 在这种情况下,将某物用作“偏移量”意味着什么?请提供示例。

1 个答案:

答案 0 :(得分:1)

  

空存储桶和非空存储桶是否可能共享相同的最低有效位

存储桶通过其位置进行标识,即每个存储桶在表中都有不同的位置。这就是为什么您不能让两个存储桶共享最低有效位-这些位唯一确定存储桶的原因。

可以拥有的是将两个散列为相同的值-或共享相同的最低位的两个不同的值-这种情况称为collision 。 Python通过查找另一个存储桶来解决插入时的冲突,并通过将存储在存储桶中的键与要查找的键进行比较来查找冲突。一个好的哈希表的目的是使冲突最小化,这是通过使用好的哈希函数并保持表稀疏来实现的,从而使存储桶有所散布。

  

在这种情况下,将某物用作“偏移”意味着什么?

偏移量是铲斗位置的另一个词。只是存储它们的数组中特定存储区的索引。