当前位置: 首页 > 知识库问答 >
问题:

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

彭衡
2023-03-14

我需要使用一个可以用C实现的数据结构,它可以在固定时间内执行基本操作,比如查找、插入和删除。一、 然而,也需要能够在恒定时间内找到最大值。

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

共有3个答案

年高洁
2023-03-14

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

  1. 查找最大值
  2. 打印最大值
  3. 删除最大值

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

戈正初
2023-03-14

是的,我同意Irleon的观点。你可以使用哈希表来执行这些操作。让我们一步一步地分析这个:
1.如果我们采取数组,插入的时间复杂度将是O(1)在最后。
2.采取链表,由于你需要做的遍历,它将是O(n)。
3.采取二叉搜索树,它将是O(logn)其中logn是树的高度。
4.现在我们可以使用哈希表。我们知道它在键和值上工作。所以,这里的关键是“number_to_be_inserted%n”,其中“n”是我们拥有的元素数量。但是当列表在同一个索引上增长时,您将需要遍历列表。所以它将是O(numbers_at_that_index)。
删除操作也是如此。当然,在冲突的情况下还有其他情况需要考虑,但是我们现在可以忽略它,我们将得到基本的哈希表。

何骞尧
2023-03-14

我会提议

>

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

    关于最大值,您可以将其存储在属性中,并在每次插入时注意最大值是否更改。删除会更复杂一些,因为如果删除最大值,则必须执行线性搜索,但只有删除最大值时才会发生这种情况。任何其他元素都可以在O(1)预期时间内删除

  •  类似资料:
    • 具有恒定的访问时间但不允许重复。允许重复但没有恒定的访问时间。 java中有没有一种数据结构允许访问时间不变并且允许重复? 我知道我可以创建自己的允许重复的< code>HashMap,但是我想使用一个已经存在的数据结构。 提前感谢您。

    • 问题内容: 我有一个现有的数据框,我需要添加一个额外的列,每行将包含相同的值。 现有的df: 新的df: 我知道如何追加现有的series / dataframe列。但这是另一种情况,因为我所需要的只是添加“名称”列,并将每一行设置为相同的值,在本例中为“ abc”。 问题答案: 将添加新列并将所有行设置为该值:

    • 我正在寻找一种数据结构: 具有无界的大小。 保持其元素的插入顺序。 在列表的开头和结尾有效地插入(理想情况下为常量时间)。 在现有元素之前或之后有效地插入(理想情况下是在恒定时间内)。 我排除了,因为它在列表开头插入时效率不高。 表面上应该是一个完美的匹配,但实际上Java实现在插入现有元素之前或之后并不有效(即它遍历整个列表以查找插入位置)。 (我个人不需要存储重复的元素,但其他人可能会) 动机

    • 问题内容: 给定一个DataFrame: 添加包含常量值(例如0)的新列的最简单方法是什么? 这是我的解决方案,但我不知道为什么这会将NaN放入“新”列? 问题答案: 之所以将其放入一列中,是因为和您右侧对象的有所不同。@zach显示了分配新的零列的正确方法。通常,尝试使索引尽可能地对齐。一个缺点是,当指数不对准你,无论他们 是不是 一致。尝试使用和方法来获得一些直觉,以便对齐具有部分,完全和未对

    • 本文向大家介绍Javascript获取当前时间函数和时间操作小结,包括了Javascript获取当前时间函数和时间操作小结的使用技巧和注意事项,需要的朋友参考一下 在项目需要一个计时器,效果如下: js代码: 然后条用这个函数就行。 最后,对Javascript日期的部分函数做个小结: var myDate = new Date(); myDate.getYear();  //获取当前年份(2位)

    • 我在写一个 Next.js 项目,数据库用的是腾讯云的 MySQL 5.7 版本,通过命令 SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP); 查询到的结果是 08:00:00,数据库的时区应该没问题,但是 Prisma 创建数据的时间少了8个小时,这是什么原因? schema.prisma 文件: