我需要比较链表和数组的最坏情况运行时间。
如果必须保留排序并且列表/数组已经有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)
答案 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)
时间。