base class for searching in a group More...
#include <base_search.h>
Public Types | |
typedef BSGSIN::PERMtype | PERM |
typedef BSGSIN::TRANStype | TRANS |
typedef boost::shared_ptr < typename BaseSearch< BSGSIN, TRANSRET >::PERM > | PERMptrType |
typedef std::list< PERMptrType > | PERMlistType |
typedef BSGSIN::PERMtype | PERM |
typedef BSGSIN::TRANStype | TRANS |
typedef boost::shared_ptr < typename BaseSearch< BSGSIN, TRANSRET >::PERM > | PERMptrType |
typedef std::list< PERMptrType > | PERMlistType |
Public Member Functions | |
BaseSearch (const BSGSIN &bsgs, uint pruningLevelDCM, bool stopAfterFirstElement) | |
constructor | |
virtual | ~BaseSearch () |
destructor | |
bool | minOrbit (ulong alpha, BSGS< PERM, TRANSRET > &groupK, uint i, ulong beta_i) const |
finds minimal elements in an orbit | |
virtual PERMptrType | searchCosetRepresentative () |
searches for a coset representative if one exists | |
virtual PERMptrType | searchCosetRepresentative (BSGS< PERM, TRANSRET > &groupK, BSGS< PERM, TRANSRET > &groupL)=0 |
searches for a coset representative if one exists | |
BaseSearch (const BSGSIN &bsgs, uint pruningLevelDCM, bool stopAfterFirstElement) | |
constructor | |
virtual | ~BaseSearch () |
destructor | |
bool | minOrbit (ulong alpha, BSGS< PERM, TRANSRET > &groupK, uint i, ulong beta_i) const |
finds minimal elements in an orbit | |
virtual PERMptrType | searchCosetRepresentative () |
searches for a coset representative if one exists | |
virtual PERMptrType | searchCosetRepresentative (BSGS< PERM, TRANSRET > &groupK, BSGS< PERM, TRANSRET > &groupL)=0 |
searches for a coset representative if one exists | |
Public Attributes | |
ulong | m_statNodesVisited |
nodes visited during backtrack search | |
ulong | m_statNodesPrunedCosetMinimality |
number of nodes where (simple) double coset minimality pruning was in effect | |
ulong | m_statNodesPrunedCosetMinimality2 |
number of nodes where advanced double coset minimality pruning with base change was in effect | |
ulong | m_statNodesPrunedChildRestriction |
number of nodes where a child constraint pruning was in effect | |
Protected Member Functions | |
bool | pruneDCM (const PERM &t, uint backtrackLevel, BSGS< PERM, TRANSRET > &groupK, BSGS< PERM, TRANSRET > &groupL) |
try to prune with advanced double coset minimality | |
bool | checkLeaf (uint level) |
true iff level is a leaf level | |
uint | processLeaf (const PERM &t, uint level, uint backtrackLevel, uint completed, BSGS< PERM, TRANSRET > &groupK, BSGS< PERM, TRANSRET > &groupL) |
processes a leaf and adds corresponding element to the generator set of K | |
virtual const std::vector < ulong > & | subgroupBase () const =0 |
base of the sought subgroup | |
void | setupEmptySubgroup (BSGS< PERM, TRANSRET > &group) const |
sets up a BSGS structure for an empty group with base subgroupBase() | |
bool | pruneDCM (const PERM &t, uint backtrackLevel, BSGS< PERM, TRANSRET > &groupK, BSGS< PERM, TRANSRET > &groupL) |
try to prune with advanced double coset minimality | |
bool | checkLeaf (uint level) |
true iff level is a leaf level | |
uint | processLeaf (const PERM &t, uint level, uint backtrackLevel, uint completed, BSGS< PERM, TRANSRET > &groupK, BSGS< PERM, TRANSRET > &groupL) |
processes a leaf and adds corresponding element to the generator set of K | |
virtual const std::vector < ulong > & | subgroupBase () const =0 |
base of the sought subgroup | |
void | setupEmptySubgroup (BSGS< PERM, TRANSRET > &group) const |
sets up a BSGS structure for an empty group with base subgroupBase() | |
Protected Attributes | |
BSGSIN | m_bsgs |
main BSGS to search in | |
BSGSIN * | m_bsgs2 |
second BSGS of a group the sough elements have to member of | |
boost::scoped_ptr < SubgroupPredicate< PERM > > | m_pred |
predicate that matches sought elements | |
std::vector< ulong > | m_order |
base point order | |
boost::scoped_ptr < BaseSorterByReference > | m_sorter |
a sorter with respect to m_order | |
ConjugatingBaseChange< PERM, TRANS, RandomBaseTranspose < PERM, TRANS > > | m_baseChange |
base change algorithm | |
const uint | m_pruningLevelDCM |
leves i with 0 <= i < m_pruningLevelDCM are prunged by advanced double coset minimality | |
bool | m_limitInitialized |
true iff other m_limit variables have been initialized | |
uint | m_limitBase |
number of base points that correspond to maximal backtrack level m_limitLevel | |
uint | m_limitLevel |
maximal backtrack level | |
const bool | m_stopAfterFirstElement |
true iff the search can be stopped after the first element found with the desired property | |
PERMptrType | m_lastElement |
last element found with desired property; only used if m_stopAfterFirstElement is true |
base class for searching in a group
permlib::BaseSearch< BSGSIN, TRANSRET >::BaseSearch | ( | const BSGSIN & | bsgs, | |
uint | pruningLevelDCM, | |||
bool | stopAfterFirstElement | |||
) | [inline] |
constructor
bsgs | BSGS to search in | |
pruningLevelDCM | prune levels smaller than pruningLevelDCM by double coset minimality with base change | |
stopAfterFirstElement | true iff the search can be stopped after the first element found with the desired property |
permlib::BaseSearch< BSGSIN, TRANSRET >::BaseSearch | ( | const BSGSIN & | bsgs, | |
uint | pruningLevelDCM, | |||
bool | stopAfterFirstElement | |||
) |
constructor
bsgs | BSGS to search in | |
pruningLevelDCM | prune levels smaller than pruningLevelDCM by double coset minimality with base change | |
stopAfterFirstElement | true iff the search can be stopped after the first element found with the desired property |
bool permlib::BaseSearch< BSGSIN, TRANSRET >::minOrbit | ( | ulong | alpha, | |
BSGS< PERM, TRANSRET > & | groupK, | |||
uint | i, | |||
ulong | beta_i | |||
) | const |
finds minimal elements in an orbit
returns true iff beta_i is the minimal element of the orbit of alpha under action of the i-th stabilizer of groupK
bool permlib::BaseSearch< BSGSIN, TRANSRET >::minOrbit | ( | ulong | alpha, | |
BSGS< PERM, TRANSRET > & | groupK, | |||
uint | i, | |||
ulong | beta_i | |||
) | const [inline] |
finds minimal elements in an orbit
returns true iff beta_i is the minimal element of the orbit of alpha under action of the i-th stabilizer of groupK
virtual PERMptrType permlib::BaseSearch< BSGSIN, TRANSRET >::searchCosetRepresentative | ( | BSGS< PERM, TRANSRET > & | groupK, | |
BSGS< PERM, TRANSRET > & | groupL | |||
) | [pure virtual] |
searches for a coset representative if one exists
the two arguments are two groups K and L such that
groupK | subgroup of G | |
groupL | subgroup of G |
Implemented in permlib::classic::BacktrackSearch< BSGSIN, TRANSRET >, permlib::partition::RBase< BSGSIN, TRANSRET >, permlib::classic::BacktrackSearch< BSGSIN, TRANSRET >, and permlib::partition::RBase< BSGSIN, TRANSRET >.
virtual PERMptrType permlib::BaseSearch< BSGSIN, TRANSRET >::searchCosetRepresentative | ( | BSGS< PERM, TRANSRET > & | groupK, | |
BSGS< PERM, TRANSRET > & | groupL | |||
) | [pure virtual] |
searches for a coset representative if one exists
the two arguments are two groups K and L such that
groupK | subgroup of G | |
groupL | subgroup of G |
Implemented in permlib::classic::BacktrackSearch< BSGSIN, TRANSRET >, permlib::partition::RBase< BSGSIN, TRANSRET >, permlib::classic::BacktrackSearch< BSGSIN, TRANSRET >, and permlib::partition::RBase< BSGSIN, TRANSRET >.