我必须在两个数据结构中选择,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
我将存储数百万个可比元素。我将同样可能同时进行这两项操作。我应该选择哪一个。
答案 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)
考虑到在现代架构上,内存带宽通常是瓶颈。因此,计算结果有时比存储和读取预先计算的值更快。换句话说,计算复杂性应与存储器复杂性一起考虑。如果计算成本不高并且可以在缓存中工作,我会保持较小的内存使用量。
但最后,你必须测试......