【发布时间】:2011-01-09 18:32:42
【问题描述】:
我正在尝试优化一个被大量使用的数据结构。现在这个数据结构被实现为复合节点的动态数组。一个典型的用法是从第一个元素到最后一个元素的顺序访问,读取和修改组成值(整数和双精度值)。典型的数组大小为 10 到 200 个元素。另一种类型的操作是插入/删除该数组的元素。经过一些分析后,我发现插入在整体算法性能方面非常昂贵,因此我决定将此数组更改为两种数据结构之一:
- 指向元素的指针数组
- 另一个包含实际元素的数组的索引数组
这样我只会在索引/指针数组中进行插入和删除,这要便宜得多。
第二个数据结构比第一个复杂得多,它需要额外的操作来避免元素数组中的重新分配,但它会将所有元素保持在同一个内存区域中,我认为这对于处理器缓存会更好。 我的问题是哪种方式更好?实现 2 个变体以将所有数组元素保留在同一内存区域中的最佳方法是什么?
【问题讨论】:
-
我建议删除以“...50 bytes”结尾的句子。这会分散您问题的本质。
-
还在一个我后来删除的答案上发布了这个:“我忘了说,我想对元素进行 O(1) 随机访问。还喜欢的列表会将元素保存在不同的内存区域中。” (引用至关重要)
-
@David 我在想这对于估计整体数组大小并将其与处理器缓存大小进行比较可能很重要。现已删除。
-
目前插入有多贵?
-
@David 进行取消插入的部分需要 30% 的时间,而进行顺序处理的部分需要 70% 的时间。
标签: arrays performance data-structures