Symmetric Group Functionality

SnFFT is designed to take the Fourier transform of functions over Sn . Although not strictly necessary to do this, having the basic functionality of the group can make testing and development much easier. These functions are in the file Element.jl.

Group Operations

sn_multiply(P1, P2)
# Parameters:
#       P1::Array{Int, 1}
#       - the first permutation
#       P2::Array{Int, 1}
#       - the second permutation
# Return Values:
#       Prod::Array{Int, 1}
#       - the permutation that is P1 * P2
# Notes:
#       - P1 and P2 must be permutations of the same size
sn_inverse(P)
# Parameters:
#       P::Array{Int, 1}
#       - a permutation
# Return Values:
#       Inv::Array{Int, 1}
#       - the permutation that is the inverse of P

Group Element Constructors

sn_p(N)
# Parameters:
#       N::Int
#       - the size of the permutation
# Return Values:
#       P::Array{Int, 1}
#       - a random permutation of N
sn_cc(N, LB, UB)
# Parameters:
#       N::Int
#       - the size of the permutation
#       LB::Int
#       - the first position that is reassigned
#       UB::Int
#       - the last position that is reassigned
# Return Values:
#       CC::Array{Int, 1}
#       - the permutation of N that is the contiguous cycle [[LB, UB]]
#       - this is the permutation that sends LB to LB + 1, LB + 1 to LB + 2, ... ,  UB - 1 to UB, and UB to LB
# Notes
#       - 1 <= LB <= UB <= N
sn_cc(N)
# Parameters:
#       N::Int
#       - the size of the permutation
# Return Values:
#       CC::Array{Int, 1}
#       - a random contiguous cycle of N
sn_at(N, K)
# Parameters:
#       N::Int
#       - the size of the permutation
#       K::Int
#       - the position that is being reassigned
# Return Values:
#       AT::Array{Int, 1}
#       - the permutation of N that is the adjacent transposition (K, K+1)
#       - this is the permutation that sends K to K + 1 and K + 1 to K
# Notes:
#       - 1 <= K < N
sn_at(N)
# Parameters:
#       N::Int
#       - the size of the permutation
# Return Values:
#       AT::Array{Int, 1}
#       - a random adjacent transposition of N
sn_t(N, I, J)
# Parameters:
#       N::Int
#       - the size of the permutation
#       I::Int
#       - the first postition that is being reassigned
#       J::Int
#       - the second position that is being reassigned
# Return Values:
#       Tr::Array{Int, 1}
#       - the permutation of N that is the transposition (I, J)
#       - this is the permutation that sends I to J and J to I
# Notes:
#       - 1 <= I <= N
#       - 1 <= J <= N
sn_t(N)
# Parameters:
#       N::Int
#       - the size of the permutation
# Return Values:
#       Tr::Array{Int, 1}
#       - a random transposition of N

Young’s Orthogonal Representation of a Permutation

yor_permutation(P, YORnp)
# Parameters:
#       P::Array{Int, 1}
#       - a permutation
#       YORnp::Array{SparseMatrixCSC, 1}
#       - YORnp[i] is Young's Orthogonal Representation for the adjacent transposition (i, i + 1) corresponding to the pth partition of n
# Return Values:
#       RM::Array{Float64, 2}
#       - Young's Orthogonal Representation of P corresponding to the pth partition of n