Scala 哪种数据结构对我的预期操作最有效?
Scala which data structure is most efficient for my intended operations?
我是运行动态规划函数,全程携带一个字符串列表
随着时间的推移,我将新字符串追加到这个列表的末尾,有时我可能会删除最后一个元素。现在我正在使用一个可变的 ListBuffer,对追加做 +=
,对删除做 .trimEnd(1)
。
完成我的动态编程过程后,我需要能够高效地访问该 list/sequence/etc 的每个元素,并按顺序(我插入的第一个项目将首先被访问,而我插入的最后一个项目将是最后访问的)。
我也尝试过 ArrayBuffers,但它们似乎都太慢了。我试图加快这个过程,我想知道我是否正在使用具有 O(n) 操作的数据结构,而当可能有一些东西具有 O(1) 时间操作来满足我的需要时。
一个简单的单链表将为您描述的 append/discard 部分提供 O(1)。最坏的情况,如果你需要在处理之前在最后反转列表,那将是一个 O(n) 操作支付一次。
请注意,如果你沿着这条路走下去,在积累阶段 "first" 和 "last" 将被颠倒(你将在前面添加项目并通过获取列表的尾部来删除第一个项目) .
我是运行动态规划函数,全程携带一个字符串列表
随着时间的推移,我将新字符串追加到这个列表的末尾,有时我可能会删除最后一个元素。现在我正在使用一个可变的 ListBuffer,对追加做 +=
,对删除做 .trimEnd(1)
。
完成我的动态编程过程后,我需要能够高效地访问该 list/sequence/etc 的每个元素,并按顺序(我插入的第一个项目将首先被访问,而我插入的最后一个项目将是最后访问的)。
我也尝试过 ArrayBuffers,但它们似乎都太慢了。我试图加快这个过程,我想知道我是否正在使用具有 O(n) 操作的数据结构,而当可能有一些东西具有 O(1) 时间操作来满足我的需要时。
一个简单的单链表将为您描述的 append/discard 部分提供 O(1)。最坏的情况,如果你需要在处理之前在最后反转列表,那将是一个 O(n) 操作支付一次。
请注意,如果你沿着这条路走下去,在积累阶段 "first" 和 "last" 将被颠倒(你将在前面添加项目并通过获取列表的尾部来删除第一个项目) .