我一直非常喜欢Data.Sequence。但是,正如我一直在学习Data.Vector,它似乎可以做所有Data.Sequence可以,但更好,加上它可以做更多的东西。我们应该弃用Data.Sequence并讲道Data.Vector吗?在Data.Vector上使用Data.Sequence有什么好的理由吗?
答案 0 :(得分:36)
这些数据结构都不能取代另一个; Data.Sequence
和Data.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)
共享前缀似乎Seq
比Vector
更好。 snoc
上的Vector
是O(n)。