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

时间复杂度-在动态数组中间插入项

汪阳辉
2023-03-14

我偶然看到了这篇关于动态数组时间复杂性的文章,它澄清了很多。然而,我有一个基于案例的问题。假设我有一个总共有6个元素的动态数组,假设删除了第4个元素。在这种情况下,删除复杂度将是O(n-index),这将是O(6-4)=2,因为最后两个元素只需要向上移动。这是正确的吗?我有一些文章给出了最坏情况下的复杂度,说如果删除最顶部的元素,那么时间复杂度将是O(n)。我找不到任何关于从中心移除/插入项目的内容。

共有1个答案

沈栋
2023-03-14

您对需要移动的项目数量的分析是正确的。然而,在大O表示法中,那仍然是O(n)。如果列表中有n个项,并且从中间移除一些项,则必须移动*0.5*n*项。但是当处理big-O时,我们去掉了任何常数乘数,所以只有O(n)。

 类似资料:
  • 下面给出了问题陈述和解决方案。我无法理解解决方案背后的逻辑。 问题陈述: 给定一个数组包含n+1个整数,其中每个整数介于1和n之间,证明至少存在一个重复的数字。假设只有一个重复的数字,找到重复的一个。 首先,搜索空间是1到n之间的数字。每次我选择一个数字mid(它是中间的那个),并计算所有等于或小于mid的数字。如果计数大于mid,则搜索空间为[1 mid],否则为[mid+1n]。我这样做,直到

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 我写了一个函数来寻找目标值在给定数组中应该插入的位置。我们假设数组有不同的值,并按升序排序。我的解必须是O(log N)时间复杂度 此代码的复杂性是否为O(log N)?

  • 我对在LinkedList开头插入元素的时间复杂性感到好奇。我知道LinkedList本身会将现有元素向右移动一个索引,但要做到这一点,它会进行与列表中现有元素一样多的迭代吗? 另外,最好的方式是在开头插入offerFirst吗?

  • 在Google上的几个帖子(例如,https://cs . stack exchange . com/questions/125995/median-of-medians-proof-for-time-complexity)和文章中,我看到了为中位数写的以下时间复杂度递归: <代码> T(n) 但是我很困惑,因为这种递归似乎认为MoM嵌入到快速选择中,因此是快速选择的递归公式,用于在使用MoM查找

  • 假设T是具有n个节点和高度h的二叉查找树。T的每个节点x存储一个实数x。键。给出以下算法Func1(T. root)的最坏情况时间复杂度。你需要证明你的答案。 x.left() 对于最坏情况下的运行时,我认为这将是O(树的高度),因为这基本上类似于最小()或最大()二元搜索树算法。然而,它是递归的,所以我对是否将O(h)作为最坏的运行时编写有点犹豫。 当我考虑它时,最坏的情况是如果函数执行if(s