In mathematics, especially the field of computational group theory, a Schreier vector is a tool for reducing the time and space complexity required to calculate orbits of a permutation group.
Suppose G is a finite group with generating sequence
X=\{x1,x2,...,xr\}
\Omega=\{1,2,...,n\}
\omega\in\Omega
\omega
g\inG
\omegag=\alpha
\alpha\in\omegaG
All variables used here are defined in the overview.
A Schreier vector for
\omega\in\Omega
v=(v[1],v[2],...,v[n])
v[\omega]=-1
\alpha\in\omegaG\setminus\{{\omega}\},v[\alpha]\in\{1,...,r\}
v[\alpha]
v[\alpha]=0
\alpha\notin\omegaG
Here we illustrate, using pseudocode, the use of Schreier vectors in two algorithms
Input: ω in Ω,
X=\{x1,x2,...,xr\}
for i in :
set v[''i''] = 0
set orbit =, v[''ω''] = −1
for α in orbit and i in :
if
xi | |
\alpha |
append
xi | |
\alpha |
set
xi | |
v[\alpha |
]=i
return orbit, v
Input: v, α, X
if v[''α''] = 0:
return false
set g = e, and k = v[''α''] (where e is the identity element of G)
while k ≠ −1:
set
g={xk}g,\alpha=
| |||||||
\alpha |
,k=v[\alpha]
return g