【问题标题】:Why is insertion and deletion faster in a linked list compared to an array?为什么与数组相比,链表中的插入和删除更快?
【发布时间】:2020-12-14 17:28:27
【问题描述】:

考虑到链表和数组,从中间插入/删除数据都有O(n)的复杂度,为什么首选链表? 数组的O(n)(执行操作)是否比链表的(索引)成本更高?

【问题讨论】:

  • 你说“链表是首选”和“链表插入和删除速度更快”的出处是什么?这取决于您使用的实际编程语言。另外,在链接列表的上下文中,“(索引)”是什么意思?

标签: data-structures linked-list big-o


【解决方案1】:

对于大小为“M”的数组:如果我想删除第 N 个位置的元素,那么我可以直接使用索引一次转到第 N 个位置(我不必遍历到第 N 个索引)然后我可以删除元素,直到此时复杂度为 O(1),然后我将不得不移动其余元素(M-N 移动),因此我的复杂度将是线性的,即 O(M-N+1)。因此,最后的删除或插入将给我最好的性能(作为 N ~ M),而在开始的删除或插入将是最差的(作为 N ~ 1)。

现在是大小为 "M" 的 LinkedList:如果您已经引用了要在时间复杂度为 O(1) 之后插入或删除的节点。如果不提供,我们不能直接到达LinkedList中的第N个元素,要访问第N个元素我们必须遍历N个元素,所以在LinkedList中搜索比ArrayList更昂贵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 2013-10-14
    • 2015-06-29
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多