【发布时间】:2019-12-24 05:03:54
【问题描述】:
我无法理解使用负载因子对哈希表的链式和开放式寻址进行大 O 分析。
据我了解:
LoadFactor = (HashTable 中的条目数)/(HashTable 中的“槽”数) = (n/m)
因此,LoadFactor 反映了输入到 HashTable 中的数据正在使用多少 HashTable。
对于链式哈希表,最坏情况的时间复杂度为 O(n),因为所有元素散列到 HashTable 中的最后一个槽的数据分布不均匀,将问题减少到在大小为的链表中进行搜索n.
对于开放地址哈希表,最坏情况时间复杂度为 O(n),因为再一次,所有元素散列到一个 hashCode 的数据的非均匀分布将导致所有元素连续输入。因此,问题简化为在大小为 n 的数组中进行搜索。
对于最坏的情况,我假设 n>m。
现在对于较小的负载因子,链式哈希表和开放地址哈希表都会产生 O(1)。
我看不出 n>m 和 n 之间的区别
为什么会这样?
【问题讨论】:
-
您似乎混淆了最坏情况复杂性和预期情况复杂性。无论负载因子如何,非自适应哈希表的最坏情况总是 O(n),因为最坏情况是所有条目都具有相同的哈希值。
标签: data-structures big-o hashtable