Data.Vector会替换Data.Sequence吗?

时间:2011-11-04 17:16:21

标签: haskell vector sequence

我一直非常喜欢Data.Sequence。但是,正如我一直在学习Data.Vector,它似乎可以做所有Data.Sequence可以,但更好,加上它可以做更多的东西。我们应该弃用Data.Sequence并讲道Data.Vector吗?在Data.Vector上使用Data.Sequence有什么好的理由吗?

2 个答案:

答案 0 :(得分:36)

这些数据结构都不能取代另一个; Data.SequenceData.Vector实际上位于可用于表示序列的数据结构的两端。

  • Data.Vector是一个连续的元素数组。这意味着小内存占用和O(1)查找,但可怕的突变,连接和复制(每个O(n))。 (如果你删除持久性,变异可以是O(1)。)
  • 另一方面,
  • Data.Sequence是一个纯函数树。这意味着更高的内存使用率和更少的局部性,但它支持快速访问和突变O(log n)和令人敬畏的串联O(log(min(n1,n2)))和复制。

数据结构的选择实际上取决于此处的任务。

  • 以线性方式或随机查找处理大型元素流最好使用Data.Vector
  • 如果您需要拆分,连接和更改元素,请使用Data.Sequence

答案 1 :(得分:1)

共享前缀似乎SeqVector更好。 snoc上的Vector是O(n)。