33 #ifndef SYMMETRIC_GROUP_TRANSVERSAL_H_ 34 #define SYMMETRIC_GROUP_TRANSVERSAL_H_ 36 #include <boost/iterator/counting_iterator.hpp> 41 struct SymmetricGroup;
55 PERM*
at(
unsigned long val)
const {
56 for (
unsigned int i=0; i<m_basePos; ++i) {
57 if ((symmetricGroup->B)[i] == val)
61 PERM* p =
new PERM(symmetricGroup->B.size());
62 p->setTransposition((symmetricGroup->B)[m_basePos],val);
67 unsigned int size()
const {
return symmetricGroup->n - m_basePos; }
69 boost::counting_iterator<unsigned int> begin()
const {
return boost::counting_iterator<unsigned int>(0); };
70 boost::counting_iterator<unsigned int> end()
const {
return boost::counting_iterator<unsigned int>(symmetricGroup->n-m_basePos ); };
72 const SymmetricGroup<PERM>* symmetricGroup;
73 unsigned int m_basePos;
78 #endif // SYMMETRIC_GROUP_TRANSVERSAL_H_ transversal of a symmetric group
Definition: symmetric_group_transversal.h:45
unsigned int size() const
size of basic orbit / transversal
Definition: symmetric_group_transversal.h:67
representation of a symmetric group
Definition: conjugating_base_change.h:45
SymmetricGroupTransversal(const SymmetricGroup< PERM > *sg, unsigned int basePos)
constructs a transversal of a symmetric group
Definition: symmetric_group_transversal.h:52
PERM * at(unsigned long val) const
computes a transversal element on demand if one exists
Definition: symmetric_group_transversal.h:55
Definition: abstract_bsgs.h:49