BSD-3-Clause licensed by Callan McGill

Module documentation for 0.1.1.1

This version can be pinned in stack with:perfect-vector-shuffle-0.1.1.1@sha256:40f555585ec7b56bb329630d63749fc916031f944dd6287dadb844ceeccfddde,3989

This package contains functions for performing in-place Fisher--Yates shuffles on mutable and immutable vectors along with some related functionality. The shuffles are uniform at random amongst all permuations.

For an example of how to use it:

module Main where

import Data.Vector
import Immutable.Shuffle

main :: IO ()
main = do {
shuffleMyVector >>= print;
cycleMyVector   >>= print;
derangeMyVector >>= print;
}

myVector :: Vector Int
myVector = fromList [1..10]

shuffleMyVector :: IO (Vector Int)
shuffleMyVector = shuffleM myVector

cycleMyVector :: IO (Vector Int)
cycleMyVector = maximalCycleM myVector

derangeMyVector :: IO (Vector Int)
derangeMyVector = derangementM myVector

This gives the following:

>>> main
[2,8,1,5,10,9,7,3,6,4]
[6,8,4,10,9,2,5,7,3,1]
[8,5,4,1,10,9,3,6,2,7]

>>> main
[7,9,3,5,10,6,8,1,2,4]
[2,4,10,7,8,1,5,9,3,6]
[4,8,5,2,7,3,9,6,10,1]

Changes

Changelog

[0.1.1] - 2019-07-18

  • Added sample without replacement, maximal cycle and derangement functions
  • Added test coverage for all new functionality
  • Added example executable

[0.1.0] - 2019-05-02

  • Added Fisher–Yates shuffle algorithms
  • Added test suite
comments powered byDisqus