所以我明天正在学习我的算法分析考试,我正在阅读教师的笔记和例子。只有一件事我不明白,这就是这个问题:
问题:在基于数组的列表(游标实现)中的给定元素之后插入元素需要最坏的情况时间:
答案:O(1)
就个人而言,我看到最坏的情况是光标位于列表的开头,因此在插入新元素之前,必须将数组中的N-1个项目复制到下一个位置,因此它是一个O (N)在最坏的情况下操作。
然而,当被问及这是否是一个拼写错误时,教练说它不是。
这背后的原因是什么?对于所有未来的回答者,谢谢你的时间。
答案 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;