具有常数时间操作的数据结构

Data structure with constant time operations

本文关键字:数据结构 操作 时间 常数      更新时间:2023-10-16

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

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

我建议

  1. 你可以使用一个给出0(1)期望时间的哈希表

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

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

但是当列表在同一索引上增长时,您将需要遍历列表。所以它会是0 (numbers_at_that_index)
删除操作也是如此。

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

如果你能做到这一点,那么你就可以在线性时间内进行排序:只需插入所有项目,然后执行以下n次:

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

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