有关插入,查找和删除操作效率的问题?

时间:2017-03-23 19:12:11

标签: big-o asymptotic-complexity

答案是(2)和(3),但我不知道为什么。我没有太多关于数据结构的信息。有人可以解释为什么这些答案是正确的,为什么其他答案是错误的。 谢谢

enter image description here

1 个答案:

答案 0 :(得分:0)

1)不正确。让我们用一个大小为10的数组的小例子。无论数组是否排序,如果删除第5个元素,你必须移动6使它变为5,移动7使它变为6,等等。

2)正确。双链表是一个列表,其中每个对象都包含指向前一个和下一个对象的指针。让我们取元素i出于教育目的,考虑[i + 1]是下一个对象而[i - 1]是前一个对象(好像我们在数组中)

list[i].pPrevious = list[i - 1];
list[i].pNext = list[i + 1]

要从列表中删除对象i,您只需确保前一个对象指向下一个对象,反之亦然。

list[i - 1].pNext = list[i + 1];
list[i + 1].pPrevious = list[i - 1];

之后你只需要删除对象本身,但它不再属于列表。

3)正确,最糟糕的情况是树只在左边,或者只在右边。这意味着您必须遍历整个树才能找到您正在寻找的对象。它是在O(n)中完成的,它与尝试获取列表的最后一个对象相同。

4)不正确。如果您尝试插入/查找/删除的对象是树的第一个(也是唯一的)对象,则它只是O(1)。通常的情况需要遍历树,平均值为O(log n)

5)见1)