当我需要在哈希表或平衡二叉树之间进行选择以实现集合或关联数组时,应该考虑哪些因素?
发布于 2011-01-31 12:24:17
我恐怕这个问题一般都无法回答。
问题是哈希表和平衡二叉树的类型很多,它们的性能差别很大。
因此,天真的答案是:这取决于您需要的功能。如果不需要排序,则使用哈希表,否则使用平衡的二叉树。
为了得到更详细的答案,让我们考虑一些备选方案。
哈希表 (请参阅维基百科的条目中的一些基本知识)
二叉树
让我们不要忘记,O(1)是一个渐近复杂性。对于少数元素,系数通常更重要(性能方面)。尤其是当你的哈希函数慢的时候.
最后,对于集合,您也可能希望考虑概率数据结构,比如布卢姆滤波器。
发布于 2011-01-31 00:04:24
如果不需要按任何顺序保存数据,哈希表通常会更好。如果必须对数据进行排序,二叉树会更好。
发布于 2011-01-31 00:14:53
在现代体系结构中,值得注意的一点是:哈希表通常会比二叉树具有更少的内存读取,如果其负载因子较低的话。由于与燃烧CPU周期相比,内存访问往往要花费相当大的代价,因此哈希表通常更快。
在下面的二叉树中,假设是自平衡的,就像红色的黑树、AVL树或踏板树。
另一方面,如果您在决定扩展哈希表时需要重新散列哈希表中的所有内容,这可能是发生的代价高昂的操作(摊销)。二叉树没有这个限制。
二叉树更容易在纯函数语言中实现。
二叉树有一个自然排序顺序和一种自然的方式来遍历树的所有元素。
当哈希表中的加载因子较低时,您可能会浪费大量内存空间,但是使用两个指针,二叉树往往占用更多的空间。
哈希表几乎是O(1) (取决于处理负载因子的方式)和Bin (Lg n)。
树木往往是“一般的表演者”。他们没有做得特别好,但也没有做得特别糟糕。
https://stackoverflow.com/questions/4846468
复制相似问题