Big o 关于插入、查找和删除操作效率的问题?

Big o 关于插入、查找和删除操作效率的问题?,big-o,asymptotic-complexity,Big O,Asymptotic Complexity,答案是(2)和(3),但我不知道为什么。我没有太多关于数据结构的信息。有人能解释为什么这些答案是正确的,为什么其他答案是不正确的吗。 多谢各位 不正确。让我们举一个大小为10的数组的小例子,不管数组是否排序,如果删除第5个元素,则必须移动6使其变为5,移动7使其变为6,依此类推 2) 对。双链接列表是一个列表,其中每个对象都有一个指向上一个和下一个对象的指针。让我们把元素 i>代码>作为教育目的,考虑[i+1 ]是下一个对象,而i(1)是前一个对象(好像我们在一个数组中) 要从列表中删除对象i,

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

不正确。让我们举一个大小为
10
的数组的小例子,不管数组是否排序,如果删除第5个元素,则必须移动6使其变为5,移动7使其变为6,依此类推

2) 对。双链接列表是一个列表,其中每个对象都有一个指向上一个和下一个对象的指针。让我们把元素<代码> i>代码>作为教育目的,考虑[i+1 ]是下一个对象,而i(1)是前一个对象(好像我们在一个数组中)

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

list[i - 1].pNext = list[i + 1];
list[i + 1].pPrevious = list[i - 1];
之后,您只需要删除对象本身,但它不再属于列表

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

4) 不对。只有当您试图插入/查找/删除的对象是树的第一个(也是唯一一个)对象时,它才会是O(1)。通常情况下,需要遍历树,并将其平均为O(logn)

5) 请参见
1)

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