/* File partn.h. Contains miscellaneous short functions for computing with partitions associated with permutation groups:
constructOrbitPartition: This function constructs the partition of the set of points corresponding to the orbits of the stabilizer of an initial segment of the base in a permutation group.
popToHeight: This function pops partitions from a partition stack until the stack height reaches a designated value.
cellNumberAtDepth For a given point alpha, his functions returns the number of the cell of the partition at a given depth that contains alpha. (Note that, for the top partition, it is not necessary to
invoke this function. */
/* This function fills in two arrays (which must be allocated prior to the function call: orbitNumberOf and sizeOfOrbit. The array orbitNumberOf is set such that orbitNumberOf[pt] = i exactly when pt lies in the i'th orbit of the stabilizer of a given initial segment of the base in a given permutation group, and the array sizeOfOrbit is set so that sizeOfOrbit[j] is the length of the j'th orbit. Note orbit i is taken to preceed orbit j when the first point of orbit i is less than the first point of orbit j. A base for the group must be known, and the field essential of each generator must be filled in. (There is no harm beyond loss of efficienct
in marking all generators essential.) */
void *constructOrbitPartition(
PermGroup *G, /* The permutation group. */ Unsigned level, /* The orbits of G^(level) will be found. */
UnsignedS *orbitNumberOf, /* Set so that orbitNumberOf[pt] is the number
of the orbit containing pt. */
UnsignedS *sizeOfOrbit) /* Set so that sizeOfOrbit[i] is the size of
the i'th orbit. */
{ Unsigned orbitCount = 0, found = 0, processed = 0, oldFound = 0, orbitRep,
pt, img;
UnsignedS *queue = allocIntArrayDegree();
Permutation *genHeader, *gen;
/* Given a point alpha, a partition stack UpsilonStack, and a depth (depth), this function returns an integer i such that alpha lies in the i'th cell of the partition at depth depth in UpsilonStack. It is assumed that depth
does not exceed the height of UpsilonStack. */
Unsigned cellNumberAtDepth( const PartitionStack *const UpsilonStack, constUnsigned depth, constUnsigned alpha)
{ Unsigned m; for ( m = UpsilonStack->cellNumber[alpha] ; m > depth ;
m = UpsilonStack->parent[m] )
; return m;
}
/* This function returns the number of cells is a partition. It works by scanning cellNumber (inefficient, but doesn't require other fields to
be filled in). */
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.