这属于stackoverflow.com/help/on-topic的“软件算法”,在这种情况下,是从未排序的数组列表中删除项目的软件算法
当我们讨论不同数据结构的大运行时,这是来自我的课程
我的问题是删除未排序的非动态数组的值。根据我们如何实施它(见下文)
,这不应该是O(n) public void remove(E value) {
int index = getIndex(value);
elementData[index] = elementData[size - 1];
elementData[size - 1] = null;
size--;
}
public int getIndex(E value) {
for (int i = 0; i < size; i++) {
if (elementData[i].equals(value)) {
return i;
}
}
return -1;
}
虽然我同意这段代码的事实
elementData[index] = elementData[size - 1];
elementData[size - 1] = null;
size--;
将在O(1)中运行。我从我的另一个问题Why is clear an O(n) operation for linked list?中学到的是,Big Oh“为了运行代码而必须完成所有必须完成的工作”,在这种情况下包括由O(n)绑定的getIndex函数。 因为remove方法由O(n)和O(1)组成,所以它将在O(n)时间内运行。 每个人都同意我的评估,还是我错过了什么?
答案 0 :(得分:1)
是的,你是对的。你的getIndex
函数平均运行在O(n)(O(1/2 * n),但我们通常对常量不感兴趣)。 remove
函数中的其他代码以恒定时间运行,因此总运行时间为O(n + c),其中c是常量,表示总运行时间为O(n)。