【发布时间】:2014-03-20 18:20:31
【问题描述】:
我有一个关于数据结构基础的问题。
我知道数组的访问时间比链表快。 O(1)- array 与 O(N) -linked list
但是链表在删除元素方面优于数组,因为不需要 O(N)- array 与 O(1) -linked list
所以我的理解是,如果对数据的大部分操作都是删除的,那么使用链表是更可取的。
但是如果用例是:
- 删除元素但不要太频繁
- 访问所有元素
有明确的赢家吗?在一般情况下,我知道使用列表的缺点是我访问可能位于单独页面上的每个节点,而数组具有更好的局部性。
但这是我应该关注的理论问题还是实际问题?
混合类型,即从数组(使用额外字段)创建链表是个好主意吗?
我的问题也取决于语言吗?我假设数组中的移动元素在所有语言中具有相同的成本(至少渐近)
【问题讨论】:
-
"有明确的赢家吗?"不会。如有疑问,请尝试不同的选项并为它们计时。在链表的情况下,使用一些自定义分配器可能会很有用,可以让你的元素靠在一起
-
@NiklasB.:
use some custom allocator that keeps your elements close together我从未听说过这种技术。我怎样才能找到有关此实现的信息? -
@NiklasB.:但这假设您实际上可以自己分配内存的语言。这种方法是否依赖于语言?对于没有内存管理的语言(解释语言)是否有类似的东西
-
对于没有指针的语言,您始终可以在某个数组中使用索引而不是指针,所以是的,它是通用的。但是如果没有原始指针,这可能会带来轻微的开销
标签: performance algorithm memory-management data-structures linked-list