Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想编写以下 Haskell 函数,它将为我提供一个独特的随机生成器列表:
randomGenerators :: RandomGen g => g -> [g]
以下是不会造成重复“相同”序列的情况的合理解决方案吗?
randomGenerators g = iterate (fst . split) g
我显然扔掉了一半的发电机,但这会是个问题吗?
split只要正确实施(即,如果它产生不相关的生成器),这将起作用。这个System.Random被认为是健壮的(尽管它的实现split包含一个评论-- no statistical foundation for this!,所以使用它需要您自担风险并测试相关性)。
split
System.Random
-- no statistical foundation for this!
或者,您可以使用专门设计用于并行批处理的 RNG。例如,我有一个Random123实现基于计数器的生成器的包(目前没有很好地优化性能,但可能适合您的目的)。那里可能还有DCMT 库的绑定,或者您可以编写自己的。
Random123