hgeometry-combinatorial
Copyright(C) Frank Staals
Licensesee the LICENSE file
MaintainerFrank Staals
Safe HaskellNone
LanguageGHC2021

HGeometry.Permutation.Shuffle

Description

Implements Fishyer-Yates shuffle.

Synopsis

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)

shuffleIntMap :: (RandomGen gen, Foldable f) => gen -> f a -> IntMap a Source #

Returns a strict IntMap

shuffleSeq :: (RandomGen gen, Foldable f) => gen -> f a -> Seq a Source #

Version of Fissher-Yates shuffle that returns a Seq.

O(nlog n)