0

因此,我正在为明天的算法分析考试而学习,并且正在阅读讲师的笔记和示例。只有一件事我不明白,就是这个问题:

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

答案:O(1)

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

但是,当被问到这是不是笔误时,教练说不是。

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

4

2 回答 2

0

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

于 2012-10-22T01:39:36.283 回答
0

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

struct Element
{
    string item;
    int next;
}

给定元素 A,您​​可以在恒定时间内在 A 之后插入一个新元素 B。

int indexOfA = ..
int indexOfB = (next free index)
B.next = A.next;
A.next = indexOfB;
于 2012-10-22T01:40:54.370 回答