平均值,btree或哈希表的速度更快?

时间:2014-03-12 19:39:23

标签: data-structures hashtable time-complexity b-tree

我尝试比较b-tree和哈希表查找时间复杂度。

B树需要log_b(n)次操作,而log_b(n) <= b需要n <= b^b,所以对于b = 1010^10无论如何都是10而我1查找操作。 哈希表需要10^10操作才能平均查找。但是,如果我有一个10^10/10密钥,并且我的哈希表的大小为10那么它将是{{1}}操作,以便在平均情况下查找(对于单独的链接),或者不是?

我认为理论上很多。我想知道,在实践中哪些更好?为什么呢?

2 个答案:

答案 0 :(得分:5)

  

实践中哪些更好?

取决于。

b树始终是 O(log n)性能。

哈希表是 O(1)(比b树好得多)

  1. 您数据的良好哈希函数。
  2. 足够的哈希桶。
  3. 如果不满足这些条件,则哈希表将倾向于 O(n)(即比b树更糟糕)。

    总结:好的哈希函数:哈希表通常会更好。 b树是一致的,不需要哈希函数。

    在实践中 n 并不大,即使是通用哈希也足够接近 O(1),在问题上花费的时间是毫无意义的优化。

    真实答案:在衡量效果并确定数据结构查找时间非常重要之前,请将优化工作放在用户看到显着差异的位置。

答案 1 :(得分:1)

您无法轻松比较它们,因为它们提供不同的功能。哈希表是键值存储,而树也允许基于顺序查找(上一个/下一个等)。

经验法则:如果您想将它们用于特定任务,只需衡量哪一个更好。

注意:这些数字很大,甚至可以放入机器的内存中吗?