【问题标题】:Data structure with constant time operations具有恒定时间操作的数据结构
【发布时间】:2015-07-23 02:10:27
【问题描述】:

我需要使用可在 C++ 中实现的数据结构,它可以在恒定时间内执行基本操作,例如查找、插入和删除。但是,我还需要能够在恒定时间内找到最大值。

应该对这个数据结构进行排序以找到最大值,我已经研究过红黑树,但是它们具有对数时间操作。

【问题讨论】:

标签: c++ data-structures tree time-complexity binary-search-tree


【解决方案1】:

我会提议

  1. 您可以使用给出 O(1) 预期时间的哈希表

  2. 关于最大值,您可以将其存储在属性中,并在每次插入时注意最大值是否发生变化。删除会更复杂一些,因为如果删除最大值,则必须执行线性搜索,但这只有在删除最大值时才会发生。任何其他元素都可以在 O(1) 预期时间内被删除

【讨论】:

    【解决方案2】:

    是的,我同意 Irleon。您可以使用哈希表来执行这些操作。让我们逐步分析一下:
    1.如果我们取数组,最后插入的时间复杂度是O(1)。
    2.取链表,由于需要遍历,所以会是O(n)。
    3.取二叉搜索树,它会是 O(logn),其中 logn 是树的高度。
    4.现在我们可以使用哈希表了。我们知道它适用于键和值。所以,这里的键将是“number_to_be_inserted % n”,其中“n”是我们拥有的元素数。

    但是随着列表在同一索引上增长,您将需要遍历列表。因此它将 O(numbers_at_that_index)。
    删除操作也是如此。

    当然在发生冲突时还有其他情况需要考虑,但我们现在可以忽略它,我们将得到我们的基本哈希表。

    【讨论】:

      【解决方案3】:

      如果你能做这样的事情,那么你可以按线性时间排序:只需插入所有项目,然后,执行以下 n 次:

      1. 找到最大值
      2. 打印最大值
      3. 删除最大值

      因此,在您无法在线性时间内排序的计算模型中,您也无法在 O(1) 时间内解决所有操作的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 2012-12-23
        • 2015-12-04
        相关资源
        最近更新 更多