对于所有可能的操作,显然Seq
渐近地执行与[]
相同或更好。但是由于其结构比列表更复杂,对于小尺寸的系统而言,其不断的开销可能会使其变慢。我想知道有多少,特别是:Data.Sequence.Seq与[]相比有多快?
- 被
<|
相比:
慢多少? - 折叠/穿越
Seq
与折叠/穿越[]
(不包括折叠/穿越功能的成本)相比,要慢多少? \xs x -> xs ++ [x]
变得比|>
慢什么尺寸(大约)?++
变得慢于><
的尺寸(大约)是多少?- 与列表中的模式匹配相比,调用
viewl
和结果上的模式匹配的成本是多少? n
-elementSeq
占用多少内存相比n
-lelement list? (不计算由元素,只有结构所占用的内存。)
我知道这是很难衡量,因为与Seq
我们谈论摊销复杂,但我想知道至少有一些粗略的数据。
没有这样的比较存在。我建议使用标准基准库自己生成它。 – 2013-02-10 14:35:20
如果有人最终决定在这个基准上进行基准测试,那么为了比较而放入一个“Vector”也是很有意义的。会很高兴看到结果。收藏这个。 – 2013-02-10 14:38:04
由于在真实代码中使用GHC,中间列表往往会融合并重写并消失,这使得它们更像控制结构而不是数据结构本身,这也很困难(或不是特别有用)。 – jberryman 2013-02-10 21:51:27