我想在 Haskell 中实现以下(命令式)算法:
给定一系列对 [(e0,s0), (e1,s1), (e2,s2),...,(en,sn)],其中“e”和“s”部分都是自然的数字不一定不同,在每个时间步都会随机选择该序列的一个元素,比方说 (ei,si),并基于 (ei,si) 的值,构建一个新元素并将其添加到序列中。
如何在 Haskell 中有效地实现这一点?据我所知,随机访问的需要对于列表来说是不利的,而一次附加一个元素的需要对于数组来说则是不利的。
提前致谢。
最佳答案
我建议使用 Data.Set
或 Data.Sequence
,具体取决于您的需要。后者特别为您提供对数索引查找(与列表的线性相反)和在任一端附加 O(1)。
关于arrays - Haskell 中不断增长的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7342862/