分析基于数组的列表的插入操作(游标实现)

时间:2012-10-22 01:22:56

标签: arraylist big-o

所以我明天正在学习我的算法分析考试,我正在阅读教师的笔记和例子。只有一件事我不明白,这就是这个问题:

  

问题:在基于数组的列表(游标实现)中的给定元素之后插入元素需要最坏的情况时间:

     

答案:O(1)

就个人而言,我看到最坏的情况是光标位于列表的开头,因此在插入新元素之前,必须将数组中的N-1个项目复制到下一个位置,因此它是一个O (N)在最坏的情况下操作。

然而,当被问及这是否是一个拼写错误时,教练说它不是。

这背后的原因是什么?对于所有未来的回答者,谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

假设我们必须插入元素'a'。好吧,它说给予一个元素,我们称之为'b'。这意味着你知道下一个元素是什么,我们称之为'c'。因此,您所要做的就是将'a'的'next'元素设置为'c'。然后将'b'的下一个元素设置为'a'。此过程适用于任何元素。所以操作是恒定的时间。

答案 1 :(得分:0)

您可以使用数组实现本质上是链接列表,其中数组中的每个元素都包含指向下一个元素索引的指针。

struct Element
{
    string item;
    int next;
}

给定元素A,您可以在A之后在常量时间内插入新元素B.

int indexOfA = ..
int indexOfB = (next free index)
B.next = A.next;
A.next = indexOfB;