33 #ifndef SCHREIERTRANSVERSAL_H_ 34 #define SCHREIERTRANSVERSAL_H_ 36 #include <permlib/transversal/transversal.h> 40 namespace exports {
struct BSGSSchreierExport;
struct BSGSSchreierImport; }
50 virtual PERM*
at(
unsigned long val)
const;
52 virtual void updateGenerators(
const std::map<PERM*,typename PERM::ptr>& generatorChange);
64 virtual void registerMove(
unsigned long from,
unsigned long to,
const typename PERM::ptr &p);
95 if (transversal[val] == 0) {
99 unsigned int depth = 1;
100 PERM *res =
new PERM(*transversal[val]);
103 unsigned long pred = *res % val;
105 while (pred != val) {
106 inv = transversal[pred].get();
108 PERMLIB_DEBUG(std::cout <<
"Schreier2 " << inv <<
" / " << val <<
" , " << pred << std::endl;)
114 m_statMaxDepth = std::max(m_statMaxDepth, depth);
119 template <
class PERM>
121 unsigned int missedCount = 0;
122 BOOST_FOREACH(
typename PERM::ptr& p, this->m_transversal) {
126 typename std::map<PERM*,typename PERM::ptr>::const_iterator pIt = generatorChange.find(p.get());
128 if (pIt != generatorChange.end()) {
136 BOOST_ASSERT( missedCount == 1 );
139 template <
class PERM>
148 #endif // -- SCHREIERTRANSVERSAL_H_ Transversal base class corresponding to a base element .
Definition: transversal.h:49
SchreierTreeTransversal< PERM > clone(const std::map< PERM *, typename PERM::ptr > &generatorChange) const
returns a clone of this transversal
Definition: schreier_tree_transversal.h:140
virtual PERM * at(unsigned long val) const
returns a transversal element such that equals val
Definition: schreier_tree_transversal.h:92
import of a BSGS based on SchreierTreeTransversal
Definition: bsgs_schreier_export.h:146
virtual void registerMove(unsigned long from, unsigned long to, const typename PERM::ptr &p)
stores that 'p' maps 'from' onto 'to'
Definition: schreier_tree_transversal.h:85
Transversal class that stores transversal elements in a Schreier tree.
Definition: schreier_tree_transversal.h:44
export of a BSGS based on SchreierTreeTransversal
Definition: bsgs_schreier_export.h:99
SchreierTreeTransversal(unsigned int n)
constructor
Definition: schreier_tree_transversal.h:75
virtual bool trivialByDefinition(const PERM &x, unsigned long to) const
true if Schreier generator constructed from x and the transversal element related to "to" is trivial ...
Definition: schreier_tree_transversal.h:80
virtual void updateGenerators(const std::map< PERM *, typename PERM::ptr > &generatorChange)
updates transversal after group generators have been exchanged
Definition: schreier_tree_transversal.h:120
unsigned int n() const
size of the set the group is working on
Definition: transversal.h:98
unsigned int m_statMaxDepth
maximal depth of tree structure representing the transversal
Definition: schreier_tree_transversal.h:62
Definition: abstract_bsgs.h:49
virtual void registerMove(unsigned long from, unsigned long to, const typename PERM::ptr &p)
stores that 'p' maps 'from' onto 'to'
Definition: transversal.h:208