algorithm - 为什么单链表中的删除运行时间被认为是常数 O(1)?

标签 algorithm runtime big-o

当我们确定时间复杂度时我们总是考虑到最坏的情况。那么为什么我们不假设在单链表中删除的最坏情况(不知道值在哪里,因此需要遍历整个链表)???

我将其用作“真实来源”http://bigocheatsheet.com/

例如,删除一个数组被认为是 O(n),因为如果我们删除第一个项目,那么我们将需要重新分配数组中所有其他项目的索引。如果我们只是删除数组中的最后一项,那么它将是常数时间。但我们假设最坏的情况,这是有道理的。

那么为什么我们不对链表做同样的事情,并假设最坏的情况呢?在那种情况下,在我看来应该是 O(n) 对吗?

最佳答案

从链表中删除意味着你知道你删除了什么元素。您所做的就是将引用从该元素重新分配给下一个元素。因此这个操作是 O(1)。 当然,在链表中搜索是 O(n) 以及在数组中。但是在数组中,即使你知道你的元素,你也必须在那之后重新分配所有元素。

关于algorithm - 为什么单链表中的删除运行时间被认为是常数 O(1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50864205/

相关文章:

algorithm - 如何分析这个算法的复杂度?

c++ - sizeof(值)与 sizeof(类型)?

algorithm - 下面代码的时间复杂度是多少O(n)?

java - 检查这个 Big O 分析

performance - 大 O : is the overall performance of `IterateArray` O(n) or O(n log n)?

algorithm - 仅使用线函数绘制科赫曲线

algorithm - 在每个插槽中使用双向链表查找哈希表中的最大元素

php - 如何防止玩弄人们每天可以投票一次的投票系统?

java - 如何获取 Java 中另一个应用程序抛出的异常?

java - 如何使 JavaCompiler.CompilationTask 使用自定义 ClassLoader 或将 .class 文件用于 missin .java 文件?