小编典典

哈希表与树

algorithm

哈希表是否总是比树快?尽管哈希表具有O(1)搜索复杂度,但假设如果由于哈希函数设计不当而发生大量冲突,并且如果我们使用链结构(例如平衡树)来处理冲突,那么最坏的搜索运行时间将是O(log
n )。因此,即使在最坏的情况下,哈希表总是比树快,我能得出大小数据集的结论吗?另外,如果我有足够的内存并且不想进行范围搜索,我是否可以总是使用哈希表?


阅读 347

收藏
2020-07-28

共1个答案

小编典典

哈希表是否总是比树快?

不,并非 总是如此 。这取决于许多因素,例如集合的大小,哈希函数以及某些哈希表实现-以及删除操作的数量。

哈希表 平均O(1)每个操作-但并非总是如此。他们可能在 最坏的情况下O(n)

我现在可以想到一些偏爱树木的原因:

  1. 订购很重要。[哈希表未保持顺序,BST按定义排序]
  2. 延迟是一个问题-您不能承受O(n)可能发生的延迟。[这对于实时系统可能至关重要]
  3. 这些数据可能与您的散列函数“相似”,并且散列到相同位置[冲突]的许多元素并非不可能。[有时可以通过使用其他哈希函数来解决]
  4. 对于较小的集合-很多时候,哈希表之间的隐藏常数O(1)要比树的隐藏常数高得多-对于小集合而言,使用树可能更快。

但是,如果数据量很大,那么延迟就不是问题,并且不可能发生冲突-哈希表比使用树更好地渐近。

2020-07-28