Copyright | (C) Frank Staals |
---|---|
License | see the LICENSE file |
Maintainer | Frank Staals |
Safe Haskell | None |
Language | GHC2021 |
HGeometry.Permutation.Shuffle
Description
Implements Fishyer-Yates shuffle.
Synopsis
- shuffle :: forall vector gen a f. (Vector vector a, Foldable f, RandomGen gen) => gen -> f a -> vector a
- shuffleSeqInOut :: (RandomGen gen, Foldable f) => gen -> f a -> Seq a
- shuffleSeqInOutOrig :: (RandomGen gen, Foldable f) => gen -> f a -> Seq a
- shuffleIntMap :: (RandomGen gen, Foldable f) => gen -> f a -> IntMap a
- shuffleSeq :: (RandomGen gen, Foldable f) => gen -> f a -> Seq a
Documentation
shuffle :: forall vector gen a f. (Vector vector a, Foldable f, RandomGen gen) => gen -> f a -> vector a Source #
Fisher–Yates shuffle, which shuffles a list/foldable uniformly at random.
running time: \(O(n)\).
shuffleSeqInOut :: (RandomGen gen, Foldable f) => gen -> f a -> Seq a Source #
"Inside-out" version of Fissher-Yates shuffle that returns a Seq. see https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_%22inside-out%22_algorithm for details.
O(nlog n)
For experimentation purposes only
shuffleSeqInOutOrig :: (RandomGen gen, Foldable f) => gen -> f a -> Seq a Source #
"Inside-out" version of Fissher-Yates shuffle that returns a Seq. see https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_%22inside-out%22_algorithm for details.
O(nlog n)