我尝试比较b-tree和哈希表查找时间复杂度。
B树需要log_b(n)
次操作,而log_b(n) <= b
需要n <= b^b
,所以对于b = 10
,10^10
无论如何都是10
而我1
查找操作。
哈希表需要10^10
操作才能平均查找。但是,如果我有一个10^10/10
密钥,并且我的哈希表的大小为10
那么它将是{{1}}操作,以便在平均情况下查找(对于单独的链接),或者不是?
我认为理论上很多。我想知道,在实践中哪些更好?为什么呢?
答案 0 :(得分:5)
实践中哪些更好?
取决于。
b树始终是 O(log n)性能。
哈希表是 O(1)(比b树好得多)
如果不满足这些条件,则哈希表将倾向于 O(n)(即比b树更糟糕)。
总结:好的哈希函数:哈希表通常会更好。 b树是一致的,不需要哈希函数。
在实践中 n 并不大,即使是通用哈希也足够接近 O(1),在问题上花费的时间是毫无意义的优化。
真实答案:在衡量效果并确定数据结构查找时间非常重要之前,请将优化工作放在用户看到显着差异的位置。
答案 1 :(得分:1)
您无法轻松比较它们,因为它们提供不同的功能。哈希表是键值存储,而树也允许基于顺序查找(上一个/下一个等)。
经验法则:如果您想将它们用于特定任务,只需衡量哪一个更好。
注意:这些数字很大,甚至可以放入机器的内存中吗?