Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在haskell中洗牌和先取vs采样_Haskell_Lazy Evaluation_Shuffle_Sample_Random Sample - Fatal编程技术网

在haskell中洗牌和先取vs采样

在haskell中洗牌和先取vs采样,haskell,lazy-evaluation,shuffle,sample,random-sample,Haskell,Lazy Evaluation,Shuffle,Sample,Random Sample,在Ruby编程语言中,myList.shuffle.first比myList.sample慢,因为它会完全洗牌列表并选择第一个元素。如果在Haskell中进行了类似的操作(先洗牌,然后取走),那么速度是否会与后面的操作(对数组进行采样)一样快?我假设列表将被延迟地洗牌,因此拾取第一个元素或获取样本实际上是相同的。它可以这样写,使用装饰排序-取消装饰模式:首先用随机数标记列表中的每个元素;按标签分类;扔掉标签;以第一个元素为例。sort的标准实现将使其成为一个O(n)操作,就像采样一样。不确定是否

在Ruby编程语言中,
myList.shuffle.first
myList.sample
慢,因为它会完全洗牌列表并选择第一个元素。如果在Haskell中进行了类似的操作(先洗牌,然后取走),那么速度是否会与后面的操作(对数组进行采样)一样快?我假设列表将被延迟地洗牌,因此拾取第一个元素或获取样本实际上是相同的。

它可以这样写,使用装饰排序-取消装饰模式:首先用随机数标记列表中的每个元素;按标签分类;扔掉标签;以第一个元素为例。
sort
的标准实现将使其成为一个O(n)操作,就像采样一样。不确定是否有现成的软件包提供此功能,当然,手动编写的算法版本可能有更好的常量。

这取决于具体情况。Haskell标准没有规定任何特定的洗牌或采样算法,因此它完全取决于实现。在任何情况下,懒散并不意味着计算机将尽可能少地进行计算以产生输出。它只是意味着它避免了给定输出的“显然无用的计算”。换言之,
head$shuffle something
可能会执行一些用于洗牌元素而不是第一个元素的操作,具体取决于实现。懒散只是告诉你,当第一个元素被生成时,其他步骤是可以避免的。也许你可以看一看,告诉我们你想要使用的[which
shuffle
](hayoo.fh wedel.de/?query=shuffle;)它可以这样写,使用装饰排序取消装饰模式:首先用随机数标记列表中的每个元素;按标签分类;扔掉标签;以第一个元素为例。
sort
的标准实现将使其成为一个O(n)操作,就像采样一样。不确定是否有现成的软件包提供此功能,当然手动编写的算法版本可能有更好的常量。@DanielWagner您应该将此评论作为答案:-)@DanielWagner:我已将您的答案添加为社区Wiki