【问题标题】:Data structure with constant time operations具有恒定时间操作的数据结构
【发布时间】:2015-07-23 02:10:27
【问题描述】:
我需要使用可在 C++ 中实现的数据结构,它可以在恒定时间内执行基本操作,例如查找、插入和删除。但是,我还需要能够在恒定时间内找到最大值。
应该对这个数据结构进行排序以找到最大值,我已经研究过红黑树,但是它们具有对数时间操作。
【问题讨论】:
标签:
c++
data-structures
tree
time-complexity
binary-search-tree
【解决方案1】:
我会提议
您可以使用给出 O(1) 预期时间的哈希表
关于最大值,您可以将其存储在属性中,并在每次插入时注意最大值是否发生变化。删除会更复杂一些,因为如果删除最大值,则必须执行线性搜索,但这只有在删除最大值时才会发生。任何其他元素都可以在 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 次:
- 找到最大值
- 打印最大值
- 删除最大值
因此,在您无法在线性时间内排序的计算模型中,您也无法在 O(1) 时间内解决所有操作的问题。