【问题标题】:Dictionary implementation (Balance Binary Search tree v.s. hash table)字典实现(平衡二叉搜索树与哈希表)
【发布时间】:2011-04-15 01:13:16
【问题描述】:

在什么情况下使用平衡二叉搜索树而不是哈希表来实现 Dictionary ADT 更好?

我的假设是使用二叉搜索树总是更好,因为它的自然顺序。

但是哈希表的搜索时间确实可以和 O(1) 一样好,v.s.二叉树的 O(logn)。

所以我不确定情况是什么。

【问题讨论】:

    标签: dictionary hashtable binary-search-tree


    【解决方案1】:

    当哈希表被填满并需要重新分配内存(在硬实时系统的上下文中)时,它们可能会出现性能问题。二叉树没有这个问题。 哈希表需要比实际使用更多的内存,而二叉树则需要尽可能多的内存。

    【讨论】:

      【解决方案2】:

      您的问题已经包含答案:

      如果您不需要任何内在排序,请使用哈希表以获得更好的性能。如果您的要求需要某种排序,请考虑使用树。

      【讨论】:

        【解决方案3】:

        字典的时间复杂度是:

        -----------------------------------------
        | Operation   |  Dictionary |    BST    | 
        -----------------------------------------
        | Insert      |  O(1)       | O(log(n)) |
        -----------------------------------------
        | Delete      |  O(1)       | O(log(n)) |
        -----------------------------------------
        | Search      |  O(1)       | O(log(n)) |
        -----------------------------------------
        

        那么你在哪里使用 BST 和 Dictionary 呢?以下是 BST 的一些主要优势。

        • 使用 BST,您总是需要 O(log(n)) 操作,但调整哈希表的大小是一项代价高昂的操作
        • 如果您需要按排序顺序获取键,您可以让它们遍历中序树。排序对于字典来说是不自然的
        • 进行统计,例如查找最近的较低和较大元素,或范围查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-23
          • 1970-01-01
          • 2011-06-18
          • 1970-01-01
          • 2014-05-24
          • 1970-01-01
          • 2013-12-18
          相关资源
          最近更新 更多