performance - 链表(也包括双重链表)的适当应用是什么?

标签 performance algorithm memory-management data-structures linked-list

我有一个关于数据结构基础的问题。
我知道数组的访问时间比链表快。 O(1)- 数组O(N) - 链表
但是链表在删除元素方面优于数组,因为不需要 O(N)- array vs O(1) -linked list
所以我的理解是,如果对数据的大部分操作是删除,那么使用链表是更可取的。
但是如果用例是:

  • 删除元素但不要太频繁
  • 访问所有元素

有明显的赢家吗?在一般情况下,我知道使用列表的缺点是我访问可能位于单独页面上的每个节点,而数组具有更好的局部性。
但这是我应该有的理论或实际问题吗?
混合类型,即从数组创建链表(使用额外字段)是个好主意吗?
我的问题也取决于语言吗?我假设在所有语言中移动数组中的元素具有相同的成本(至少渐近地)

最佳答案

与纯引用相比,如果您要进行大量插入/删除操作,单链表非常有用,并且相对于数组而言性能更好。

几十年来,我一直没有看到双向链表的良好用途。 我想有一些。

就绩效而言,永远不要在不了解您的特定情况的相对绩效的情况下做出决定。 比较常见的是,人们会问一些类似于理发减肥的问题。

在编写应用程序之前,我首先会问它应该是计算密集型还是 IO 密集型。 如果受 IO 限制,我会尝试通过避免 IO 效率低下并保持处理简单明了来确保它确实受限制。 如果它应该是受计算限制的,那么我会查看它的内部循环可能是什么,并尝试使其快速。

无论如何,无论我尝试多少,都会有(有时是很大的)机会让它走得更快,为了找到它们,我使用 this technique . 无论你做什么,都不要只是试图想想 或回到你的类笔记。 您的问题与其他人的不同,解决方案也不同。

关于performance - 链表(也包括双重链表)的适当应用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22541836/

相关文章:

algorithm - 给定的数组找到给出总和的元素的所有组合

java - 骑士之旅 - 导致无限循环,我不明白为什么

c++ - 内存分配练习

c# - 按值对 <key, value> 对进行高效排序

mysql - 使用一个巨大的 MySQL 表?

algorithm - 嵌套循环中的步骤数

c++ - 是否存在与堆内存分配相关的内存开销(例如堆中的标记)?

loops - 更深入地了解循环(for、while、do while、foreach、递归等)

java - 您在生产 Java 应用程序中使用 JMX 监控什么?

performance - Adobe AIR 与 iOS 8 相关的问题和性能不佳