具有常数时间操作的数据结构
Data structure with constant time operations
我需要使用一种可在c++中实现的数据结构,它可以在常量时间内完成基本操作,例如查找,插入和删除。但是,我还需要能够在恒定时间内找到最大值。
这个数据结构可能应该排序以找到最大值,我已经研究了红黑树,但是它们有对数时间操作。
我建议
-
你可以使用一个给出0(1)期望时间的哈希表
-
关于最大值,您可以将其存储在属性中,并在每次插入时注意最大值是否发生了变化。删除会更复杂一些,因为如果最大值被删除,那么您必须执行线性搜索,但这只有在最大值被删除时才会发生。任何其他元素可以在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次:
- 找到最大
- 打印最大
- 删除最大
因此,在不能在线性时间内排序的计算模型中,也不能在O(1)时间内解决所有操作的问题。
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何在构造时声明类对数据结构的哪个成员进行操作
- 如何创建辅助数据结构来跟踪 c++ 中 decrease_key 操作的堆索引
- 对“呍”数据结构执行插入操作
- 代码导致数据结构操作崩溃
- 用于创建、可视化和算法操作数据结构的C++库
- 关于具有两列并支持CRUD操作的C++数据结构的建议
- 哪个数据结构在追加Duplicate时提供了Replace操作
- 对rope数据结构进行拆分操作
- 如何在这个c++数据结构中处理快速插入-擦除操作
- 具有常数时间操作的数据结构