【问题标题】:What is faster in average, btree or hash table? [closed]平均,btree 或哈希表哪个更快? [关闭]
【发布时间】:2014-04-17 05:06:24
【问题描述】:

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

B-tree 需要log_b(n) 操作和log_b(n) <= b 如果n <= b^b 所以b = 10 在任何情况下都是10^10,我有10 操作用于查找。 哈希表平均需要1 操作进行查找。但是,如果我有一个 10^10 键并且我的哈希表的大小是 10^10/10 那么它将是 10 在平均情况下进行查找的操作(对于单独的链接),或者不是?

我认为这很理论化。我想知道,在实践中什么更好?为什么?

【问题讨论】:

  • 大猩猩和鲨鱼哪个更好?

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


【解决方案1】:

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

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

注意:这些数字很大,它甚至适合您机器的内存吗?

【讨论】:

    【解决方案2】:

    在实践中什么更好?

    视情况而定。

    b-tree 总是 O(log n) 性能。

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

    1. 为您的数据提供良好的哈希函数。
    2. 足够的哈希桶。

    如果不满足这些条件,则哈希表将趋向于 O(n)(即比 b-tree 差得多)。

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

    实际上 n 并不大,即使是通用散列也足以达到足够接近 O(1) 的程度毫无意义的优化。

    真正的答案:在您衡量性能并确定数据结构查找时间很重要之前,请将您的优化工作放在您的用户会看到显着差异的地方。

    【讨论】:

    • 这还取决于您想要有序地图还是无序地图。
    • 哈希表的 O(n) 比 b-tree 差得多。但是对于一般情况,您提到的是正确的。
    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 2010-10-22
    • 2021-08-23
    • 2012-07-30
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多