-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Permutations, patterns, and statistics -- -- Definitions for permutations with an emphasis on permutation patterns -- and statistics. -- --
-- unrankStPerm 16 19028390 == fromList [6,15,4,11,7,8,9,2,5,0,10,3,12,13,14,1] --unrankStPerm :: Int -> Integer -> StPerm -- | The list of standard permutations of the given size (the symmetric -- group). E.g., -- --
-- sym 2 == [fromList [0,1], fromList [1,0]] --sym :: Int -> [StPerm] -- | The class of permutations. Minimal complete definition: st and -- act. The default implementations of size and -- idperm can be somewhat slow, so you may want to consider -- implementing them as well. class Perm a where size = size . st idperm u = inverse (st u) `act` u inverse u = inverse (st u) `act` idperm u ordiso u v = u == st v st :: Perm a => a -> StPerm act :: Perm a => StPerm -> a -> a size :: Perm a => a -> Int idperm :: Perm a => a -> a inverse :: Perm a => a -> a ordiso :: Perm a => StPerm -> a -> Bool -- | Generalize a function on StPerm to a function on any -- permutations: -- --
-- generalize f v = f (st v) `act` idperm v ---- -- Note that this will only work as intended if f is size -- preserving. generalize :: Perm a => (StPerm -> StPerm) -> a -> a -- | unrankPerm u rank is the rank-th (Myrvold & -- Ruskey) permutation of u. E.g., -- --
-- unrankPerm ['1'..'9'] 88888 == "561297843" --unrankPerm :: Perm a => a -> Integer -> a -- | randomPerm u is a random permutation of u. randomPerm :: Perm a => a -> IO a -- | All permutations of a given permutation. E.g., -- --
-- perms "123" == ["123","213","321","132","231","312"] --perms :: Perm a => a -> [a] -- | One pass of stack-sort. stackSort :: Perm a => a -> a -- | One pass of bubble-sort. bubbleSort :: Perm a => a -> a -- | copies p w is the list of (indices of) copies of the pattern -- p in the permutation w. E.g., -- --
-- copies (st "21") "2431" == [fromList [1,2],fromList [0,3],fromList [1,3],fromList [2,3]] --copies :: Perm a => StPerm -> a -> [Set] -- | avoids ps w is a predicate determining if w avoids -- the patterns ps. avoids :: Perm a => [StPerm] -> a -> Bool -- | avoiders ps v is the list of permutations of v -- avoiding the patterns ps. This is equivalent to the -- definition -- --
-- avoiders ps = filter (avoids ps) ---- -- but is usually much faster. avoiders :: Perm a => [StPerm] -> [a] -> [a] -- | av ps n is the list of permutations of [0..n-1] -- avoiding the patterns ps. E.g., -- --
-- map (length . av [st "132", st "321"]) [1..8] == [1,2,4,7,11,16,22,29] --av :: [StPerm] -> Int -> [StPerm] -- | A set is represented by an increasing vector of non-negative integers. type Set = Vector Int -- | subsets n k is the list of subsets of [0..n-1] with -- k elements. subsets :: Int -> Int -> [Set] instance Eq StPerm instance Ord StPerm instance Bitmask Integer instance Bitmask CUInt instance (Enum a, Ord a) => Perm [a] instance Perm StPerm instance Monoid StPerm instance Show StPerm -- | The dihedral group of order 8 acting on permutations. -- -- To avoid name clashes this module is best imported qualified; -- e.g. -- --
-- import qualified Math.Sym.D8 as D8 --module Math.Sym.D8 -- | Ration by 0 degrees, i.e. the identity map. r0, s3, s2, s1, s0, r3, r2, r1 :: Perm a => a -> a -- | The dihedral group of order 8 (the symmetries of a square); that is, -- --
-- d8 = [r0, r1, r2, r3, s0, s1, s2, s3] --d8, klein4 :: Perm a => [a -> a] -- | orbit fs x is the orbit of x under the functions in -- fs. E.g., -- --
-- orbit klein4 "2314" == ["1423","2314","3241","4132"] --orbit :: Ord a => Perm a => [a -> a] -> a -> [a] -- |
-- id = r0 --id, inverse, reverse, complement, rotate :: Perm a => a -> a -- | Common permutation statistics. Please contact the maintainer if you -- feel that there is a statistic that is missing; even better, send a -- patch or make a pull request. -- -- To avoid name clashes this module is best imported qualified; -- e.g. -- --
-- import qualified Math.Sym.Stat as S ---- -- For any permutation statistic f, below, it holds that f w -- == f (st w), and therefore the explanations below will be done on -- standard permutations for convenience. module Math.Sym.Stat -- | The number of ascents. An ascent in w is an index -- i such that w[i] < w[i+1]. asc :: Perm a => a -> Int -- | The number of descents. A descent in w is an index -- i such that w[i] > w[i+1]. des :: Perm a => a -> Int -- | The number of excedances: positions i such that -- w[i] > i; exc :: Perm a => a -> Int -- | The number of fixed points: positions i such that -- w[i] == i; fp :: Perm a => a -> Int -- | The number of inversions: pairs (i,j) such that i -- < j and w[i] > w[j] inv :: Perm a => a -> Int -- | The major index is the sum of descents. maj :: Perm a => a -> Int -- | The number of peaks: positions i such that w[i-1] -- < w[i] and w[i] > w[i+1]. peak :: Perm a => a -> Int -- | The number of valleys: positions i such that -- w[i-1] > w[i] and w[i] < w[i+1]. vall :: Perm a => a -> Int -- | The number of double ascents: positions i such that -- w[i-1] < w[i] < w[i+1]. dasc :: Perm a => a -> Int -- | The number of double descents: positions i such that -- w[i-1] > w[i] > w[i+1]. ddes :: Perm a => a -> Int -- | The number of left-to-right minima: positions i such -- that w[i] < w[j] for all j < i. lmin :: Perm a => a -> Int -- | The number of left-to-right maxima: positions i such -- that w[i] > w[j] for all j < i. lmax :: Perm a => a -> Int -- | The number of right-to-left minima: positions i such -- that w[i] < w[j] for all j > i. rmin :: Perm a => a -> Int -- | The number of right-to-left maxima: positions i such -- that w[i] > w[j] for all j > i. rmax :: Perm a => a -> Int -- | The first (left-most) element in the standardization. E.g., head -- "231" = head (fromList [1,2,0]) = 1. head :: Perm a => a -> Int -- | The last (right-most) element in the standardization. E.g., last -- "231" = last (fromList [1,2,0]) = 0. last :: Perm a => a -> Int -- | Length of the left-most increasing run: largest i such that -- w[0] < w[1] < ... < w[i-1]. lir :: Perm a => a -> Int -- | Length of the left-most decreasing run: largest i such that -- w[0] > w[1] > ... > w[i-1]. ldr :: Perm a => a -> Int -- | Length of the right-most increasing run: largest i such that -- w[n-i] < ... < w[n-2] < w[n-1]. rir :: Perm a => a -> Int -- | Length of the right-most decreasing run: largest i such that -- w[n-i] > ... > w[n-2] > w[n-1]. rdr :: Perm a => a -> Int -- | The number of components. E.g., [2,0,3,1,4,6,7,5] has three -- components: [2,0,3,1], [4] and [6,7,5]. comp :: Perm a => a -> Int -- | The rank as defined by Elizalde and Pak [Bijections for refined -- restricted permutations, J. Comb. Theory, Ser. A, 2004]: -- --
-- maximum [ k | k <- [0..n-1], w[i] >= k for all i < k ] --ep :: Perm a => a -> Int