在哈斯克尔

时间:2015-10-19 13:14:55

标签: haskell lazy-evaluation shuffle sample random-sample

在Ruby编程语言中,myList.shuffle.firstmyList.sample慢,因为它完全改变了列表并选择了第一个元素。如果在Haskell中完成了类似的事情(shuffle和take first),那么它会和后者一样快(对数组进行采样)吗?我假设列表将被懒散地洗牌,因此选择第一个元素或取样将几乎相同。

1 个答案:

答案 0 :(得分:1)

可以使用 decorate-sort-undecorate 模式编写行为:首先使用随机数标记列表中的每个元素;按标签排序;扔掉标签;并采取第一个元素。 sort的标准实现将使这成为 O(n)操作,就像采样一样。不确定是否有任何开箱即用的软件包,当然手动编写的算法版本可能有更好的常量。