我需要使用一种可在C ++中实现的数据结构,它可以在恒定时间内执行基本操作,例如查找,插入和删除。但是,我也需要能够在恒定时间内找到最大值。
这个数据结构可能应该被排序以找到最大值,我已经查看了红黑树,但是它们具有对数时间操作。
答案 0 :(得分:0)
我会建议
您可以使用哈希表,该哈希表给出O(1)预期时间
关于最大值,您可以将其存储在属性中,并在每次插入时注意最大变化。删除有些复杂,因为如果删除了最大值,则必须执行线性搜索,但只有在删除最大值时才会执行此操作。可以在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次:
因此,在无法按线性时间排序的计算模型中,您也无法在O(1)时间内解决所有操作的问题。