【发布时间】:2015-05-01 14:06:00
【问题描述】:
如果我实现一个哈希表,我知道插入是在恒定时间内完成的。我也明白,如果没有碰撞,我可以在恒定时间内找到该项目。但是,如果我插入一个项目并使用某个任意索引中的链接列表将其链接起来,它最终位于位置 2,但它链接了列表下方的 3 个链接,这是 O(n) 时间,用于搜索吗?
【问题讨论】:
标签: linked-list hashtable
如果我实现一个哈希表,我知道插入是在恒定时间内完成的。我也明白,如果没有碰撞,我可以在恒定时间内找到该项目。但是,如果我插入一个项目并使用某个任意索引中的链接列表将其链接起来,它最终位于位置 2,但它链接了列表下方的 3 个链接,这是 O(n) 时间,用于搜索吗?
【问题讨论】:
标签: linked-list hashtable
这是对 O(n) 时间的误解。 Big-O 分析与一般情况有关,而不是特定情况。直观地说,想想你的哈希表随着时间的推移进行了数千或数百万次查找,然后退后一步判断它是否在做哈希表应该做的事情。
如果您有一个完全退化的哈希表,将所有内容哈希到同一个槽中,您将获得 O(n) 查找性能。
如果 n >> m 其中 n 是存储的元素数,m 是哈希表的大小,您的哈希表查找性能将降低到 O(n)。
一般来说,哈希表的性能与平均链长有关。如果这个平均值是一个(小)常数,因此它不是 n 的函数,那么您就有了所需的 O(1) 查找性能。
【讨论】: