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;
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
PERM * at(unsigned long val) const
computes a transversal element on demand if one exists
Definition: symmetric_group_transversal.h:55
SymmetricGroupTransversal(const SymmetricGroup< PERM > *sg, unsigned int basePos)
constructs a transversal of a symmetric group
Definition: symmetric_group_transversal.h:52
representation of a symmetric group
Definition: symmetric_group.h:52