我应该为高效方法选择高时间复杂度数据结构还是高空间复杂度数据结构?

时间:2012-09-08 07:28:57

标签: java performance data-structures time-complexity

我必须在两个数据结构中选择,ArrayList和LinkedList。 我有两个操作op_one,op_two。

如果我选择ArrayList -   我最终会

for op_one ------ O(n), and at maximum n re-allocations
for op_two ------ O(1), and at maximum n re-allocations

如果我选择LinkedList -   我最终会

for op_one ------ O(n), and zero re-allocations
for op_two ------ O(n), and zero re-allocations

我将存储数百万个可比元素。我将同样可能同时进行这两项操作。我应该选择哪一个。

3 个答案:

答案 0 :(得分:3)

我建议你把它们放在一起并采用一种现实的方式,看看哪个更快。如果它们没有显着差异,我会使用您认为最简单的方法。

虽然ArrayList和LinkedLIst的顺序对于空格是相同的,但ArrayList要小得多。

除非您知道自己存在性能问题,否则所有相同的清晰度通常都是最重要的。

答案 1 :(得分:0)

(问题首先被理解为无视空间的时间复杂性。请求在评论中做出澄清)

我会使用ArrayList(通过LinkedList),不仅因为时间复杂,而且因为它更简单,并且不为每个项目构建新节点。

注意在任何一种情况下总体复杂度将为O(n):对于ArrayList,O(n)+ O(1),或者prob * O(n)+(1-prob)* O(1)将在O(n)的顺序。

给定相同的复杂度(O(n)),那么你应该找出实际的执行时间,或选择更容易实现或维护。

答案 2 :(得分:0)

考虑到在现代架构上,内存带宽通常是瓶颈。因此,计算结果有时比存储和读取预先计算的值更快。换句话说,计算复杂性应与存储器复杂性一起考虑。如果计算成本不高并且可以在缓存中工作,我会保持较小的内存使用量。

但最后,你必须测试......