【发布时间】:2012-04-05 17:49:40
【问题描述】:
哈希表总是比树快吗?尽管哈希表具有 O(1) 的搜索复杂性,但假设如果由于设计不良的哈希函数发生大量冲突,并且如果我们使用链式结构(例如平衡树)处理冲突,那么搜索的最坏情况运行时间将是 O(log n )。因此,即使在最坏的情况下,我是否可以得出大数据集或小数据集的结论,哈希表总是比树快?另外,如果我有足够的内存并且我不想进行范围搜索,我可以一直使用哈希表吗?
【问题讨论】:
-
我不是专家,但我会说这是情境性的。许多散列函数很昂贵,对于某些访问模式,树是好的。
-
“总是”是一个包罗万象的大词。您是否有机会编辑此问题以将其简化为更具体的内容,例如特定场景(仅)?否则它几乎肯定会因为不具建设性而被关闭。
-
这里很多人都提到最坏的情况是 O(N)。如果使用平衡树结构而不是链表来处理冲突,怎么可能是 O(n)。在像 AVL 这样的平衡树中搜索的最坏情况是 O(log n)
-
@avinashshah 您可以通过使用其他一些溢出数据结构来减少最坏情况的搜索情况,但您不会免费获得
O(lg n)搜索。它是以O(lg n)插入为代价的,因为您现在正在插入一棵树或类似的树,在最坏的情况下它包含所有元素。在几乎所有的应用程序中,权衡是不值得的。
标签: algorithm data-structures hash tree hashtable