散列表总是比树更快吗?虽然散列表具有O(1)的搜索复杂度,但是如果由于糟糕的设计而发生了许多冲突,如果我们使用链式结构(例如平衡树)来处理冲突,则搜索的最坏情况运行时间将为O(log n)。所以我可以得出结论,在大或小数据集的情况下,即使在最坏情况下,散列表也总是比树更快吗?此外,如果我有充足的内存并且不想进行范围搜索,我是否总是可以选择散列表?
散列表总是比树更快吗?虽然散列表具有O(1)的搜索复杂度,但是如果由于糟糕的设计而发生了许多冲突,如果我们使用链式结构(例如平衡树)来处理冲突,则搜索的最坏情况运行时间将为O(log n)。所以我可以得出结论,在大或小数据集的情况下,即使在最坏情况下,散列表也总是比树更快吗?此外,如果我有充足的内存并且不想进行范围搜索,我是否总是可以选择散列表?
O(n)
。[这对于实时系统可能是关键]但是-如果数据很大,延迟不是问题,并且冲突不太可能-哈希表在渐近意义下比使用树更好。
O(n)
操作-这是一个问题),相似的哈希值并不是真正的缺点,因为可以通过选择不同的哈希函数轻松解决,而大小问题通常是由于哈希函数开销引起的,如果我记得正确的话。你具体有什么问题? - amit在最糟糕的情况下,哈希表的时间复杂度为O(n)。但是这比太阳现在爆炸的可能性要低上亿倍,所以当使用一个好的哈希函数时,你可以安全地假设它的时间复杂度为O(1),除非太阳爆炸。
另一方面,哈希表和树的性能可能因实现、语言和月亮的阶段而有所不同,所以对于这个问题唯一好的答案是"试试两种方法,思考并选择更好的"。
O(lg n)
的搜索效率。这要付出插入成本为O(lg n)
的代价,因为现在你正在插入到一棵树或类似的数据结构中,该数据结构在最坏情况下包含所有元素。在几乎所有应用程序中,这种权衡都不值得。 - verdesmarald