我理解哈希表的吸引力在于您获得了O(1)查找时间,但我很难理解存储组件的工作方式。
我理解哈希表使用键值对,给定某个键可以获得其特定值。所以,如果我想将一个名字和一个电话号码联系起来,我可以选择" Paul"作为密钥,电话号码作为我接收的价值。我明白了很多。
3
),那个值会有一个电话号码,因此是O(1)查询时间?答案 0 :(得分:1)
如果在“保罗”的散列索引中存储了多个电话号码,我怎么知道哪一个实际上是保罗的?
通常,在此之后,将逐个检查每个条目的相等性,与在链接列表中进行常规搜索的方式相同。
那么它的工作原理是在“Paul”被散列到(例如3)的数组索引处,那里的值会有一个电话号码,因此是O(1)查找时间吗?
差不多!散列值通常首先以某种方式转换为桶号,因为散列结果可能超过查找表的合理大小(例如40亿)。
答案 1 :(得分:0)
如果在“保罗”的散列索引中存储了多个电话号码,那该怎么办 我知道哪一个实际上是保罗的吗?
存储在哈希表桶中的项目包括多于电话号码(值)。哈希表存储 键和值。
因此,它在“保罗”被散列到的数组索引处起作用 (比方说,3),该值会有一个电话号码,因此O(1)查找 时间?
是的,当“Paul”被哈希到“3”时,通常hash_table [3]中的项目都名称为“Paul”和 Paul的电话号码 - - 通常没有碰撞。
但偶尔会发生碰撞,
并且hash_table [3]中的第一项存储了一些其他名称。
不同哈希表算法之间的主要区别在于它们如何处理冲突(它们的"collision resolution strategy"),其中lookup("Paul")
函数下一步显示保罗的姓名和电话号码。