这些的运行时间是多少?

时间:2016-05-08 11:32:43

标签: arrays linked-list time-complexity big-o

我需要比较链表和数组的最坏情况运行时间。

如果必须保留排序并且列表/数组已经有n个项目,那么下面的最坏情况运行时间是多少?为什么?

以下是问题和答案:

Adding an item to the front of a linked list. ANSWER ATTEMPT: O(1)
Adding an item to the front of a standard array. ANSWER ATTEMPT: O(n)

Accessing the (n/2):th item of a linked list. ANSWER ATTEMPT: O(n)
Accessing the (n/2):th item of a standard array. ANSWER ATTEMPT: O(1)

Deleting the (n/2):th item from a linked list. ANSWER ATTEMPT: O(1) - CORRECT ANSWER O(n)
Deleting the (n/2):th item from a standard array. ANSWER ATTEMPT: O(n)

1 个答案:

答案 0 :(得分:2)

  

将项目添加到链接列表的前面。答案:O(1)

要在列表的开头添加元素,您只需要更改一些指针。因此,它的复杂性为O(1)

  

将项目添加到标准数组的前面。答案:O(n)

在数组中,要在开头(或中间)添加元素,存储在该索引之后的所有元素都需要移位一个位置。因此,在最坏的情况下需要O(n)

  

访问链接列表的第(n / 2)项:答案:O(n)

要访问链表中的元素,您需要使用下一个指针从头开始遍历它,因为它们在内存中不连续。因此,需要O(n)时间。

  

访问标准数组的(n / 2)项。答案:O(1)

数组在内存中是连续的。因此,您可以使用i时间内的索引访问O(1)元素。

除此之外的所有答案都是正确的。

  

从链接列表中删除(n / 2):项目。答案:O(1)

删除第(n / 2)个元素是O(n),因为第(n / 2)个元素的访问时间不是O(1)。您需要遍历数组的一半,这是O(n)操作。

  

从标准数组中删除(n / 2):项。答案:O(n)

就像添加的情况一样,您需要在删除的索引向前一步后复制元素。因此,需要O(n)时间。

相关问题