/* This function fills in two arrays (which must be allocated prior to the functioncall:orbitNumberOfandsizeOfOrbit.ThearrayorbitNumberOfis setsuchthatorbitNumberOf[pt]=iexactlywhenptliesinthei'thorbit ofthestabilizerofagiveninitialsegmentofthebaseinagiven permutationgroup,andthearraysizeOfOrbitissetsothatsizeOfOrbit[j] isthelengthofthej'thorbit.Noteorbitiistakentopreceedorbitj whenthefirstpointoforbitiislessthanthefirstpointoforbitj. Abaseforthegroupmustbeknown,andthefieldessentialofeach generatormustbefilledin.(Thereisnoharmbeyondlossofefficienct
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), thisfunctionreturnsanintegerisuchthatalphaliesinthei'thcell ofthepartitionatdepthdepthinUpsilonStack.Itisassumedthatdepth
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 scanningcellNumber(inefficient,butdoesn'trequireotherfieldsto
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.