【发布时间】:2018-04-18 15:54:20
【问题描述】:
在data structures and algorithms 书的第 290 页中提到,arraylist 的 remove(i) 复杂度为 O(1)。我的第一个问题是为什么不是 O(n)?还提到链表的add(i,e)是O(n),所以我的第二个问题是为什么不是O(min(i,n-i))?
最后,我的第三个问题是复杂性被称为 O(min(i,n-i)) 的原因是因为它是一个双向链表,这意味着我们可以从开头 (i) 或结尾 (n-i) 遍历?
【问题讨论】:
-
remove(i)for ArrayList 绝对不是O(1)。您可以在帖子中包含上下文吗?我没有第六版,但我找到了第四版的 pdf,其中讨论了围绕该页码的基于 arraylist 的堆栈实现。在这种情况下,通过从 ArrayList 末尾删除元素来弹出元素实际上是O(1) -
@thatotherguy 请看这个链接:doc.lagout.org/programmation/Java/…
-
我明白了。它说
java.util.List.remove(i)对于 ArrayList 是O(1),对于 LinkedList 是O(min{i,n−i})。这是错误的。我看了勘误表,没有提到。
标签: java arraylist linked-list time-complexity