具有恒定时间操作的数据结构

时间:2015-07-23 02:10:28

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

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

这个数据结构可能应该被排序以找到最大值,我已经查看了红黑树,但是它们具有对数时间操作。

3 个答案:

答案 0 :(得分:0)

我会建议

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

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

答案 1 :(得分:0)

是的我同意Irleon。您可以使用哈希表来执行这些操作。让我们一步一步地分析:
1.如果我们采用数组,插入的时间复杂度最后将为O(1) 2.取链表,由于你需要进行遍历,它将是O(n) 3.获取二叉搜索树,它将是O(logn),其中logn是树的高度 4.现在我们可以使用哈希表。我们知道它适用于键和值。所以,这里的键将是' number_to_be_inserted%n'在哪里' n'是我们拥有的元素数量
但是当列表在同一索引上增长时,您将需要遍历列表。因此它将是O(numbers_at_that_index)。
删除操作也是如此。

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

答案 2 :(得分:0)

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

  1. 查找最大值
  2. 打印最大值
  3. 删除最大值
  4. 因此,在无法按线性时间排序的计算模型中,您也无法在O(1)时间内解决所有操作的问题。