algorithm - 链表移除操作时间复杂度 O(n) vs O(1)

标签 algorithm data-structures time-complexity big-o

当我回顾数据结构和算法的大 O 表示法时,当不同来源将 O(n) 时间复杂度用于从链表中删除节点与 O(1) 相比时,我感到困惑。例如,big O cheat sheet在删除节点时放置 O(1),因为我认为删除节点将是 O(n),因为您必须先找到该节点然后将其删除。

那么我的问题是,O(1)的时间复杂度是不是只假设了删除操作本身,而没有考虑到必须先找到节点呢?让我们假设要删除的节点位于列表中的任何位置,而不仅仅是列表的前端或末尾。

我已经查看了以下问题,但它们没有解决我的问题:

big O notation for removing an element from a linked list

Big-O summary for Java Collections Framework implementations

What are the time complexities of various data structures?

最佳答案

你的问题的答案是:是的。

通常,当声明在链表中插入或删除的时间复杂度为 O(1) 时,假定指向相关节点的指针是已知的。然而,这并非完全没有用。考虑您要遍历列表并删除与特定描述匹配的元素的情况。使用链表,这可以在 O(n) 时间和 O(1) 额外空间内完成。对于数组,这通常需要 O(n^2) 时间或 O(n) 额外空间。

关于algorithm - 链表移除操作时间复杂度 O(n) vs O(1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54173593/

相关文章:

c++ - 如何使用Trie数据结构查找所有可能子串的LCP总和?

algorithm - 排名比较算法

algorithm - "Flip"仅使用 +1/-1 而不使用 if/else 的简单循环的输出

algorithm - Max-Heap 中删除的最佳情况时间复杂度

algorithm - C4.5 决策树 : can deeps be higher in linear separable data then non-linear separable?

optimization - 什么是写时复制?

java - 无法在递归调用中设置引用变量

algorithm - 舞蹈环节的复杂性

javascript - 这个函数的运行时复杂度是多少?

java - Java中ArrayList的retainAll和removeAll的时间复杂度是多少。