permlib::Transversal< PERM > Class Template Reference

Transversal base class corresponding to a base element $\alpha$. More...

#include <transversal.h>

Inheritance diagram for permlib::Transversal< PERM >:
Inheritance graph
[legend]

List of all members.

Classes

struct  TrivialAction
 action of a PERM on ulong element More...

Public Member Functions

 Transversal (uint n)
 constructor
virtual ~Transversal ()
 virtual destructor
virtual PERM * at (ulong val) const =0
 returns a transversal element $u$ such that $\alpha^u$ equals val
virtual bool trivialByDefinition (const PERM &x, ulong to) const =0
 true if Schreier generator constructed from x and the transversal element related to "to" is trivial by defintion
virtual bool contains (const ulong &val) const
 true iff there exists a transversal element mapping $\alpha$ to val
std::list< ulong >::const_iterator begin () const
 begin iterator of basic orbit
std::list< ulong >::const_iterator end () const
 end iterator of basic orbit
uint size () const
 size of basic orbit / transversal
uint n () const
 size of the set the group is working on
template<class InputIterator >
void sort (InputIterator Bbegin, InputIterator Bend)
 sorts orbit according to order given by list of points
bool sorted () const
 true iff orbit is sorted
virtual void orbit (ulong alpha, const PERMlist &generators)
 computes transversal based on orbit of $\alpha$ under generators
virtual void orbitUpdate (ulong alpha, const PERMlist &generators, const PERMptr &g)
 updates transversal based on orbit of $\alpha$ under generators where g is a new generator
virtual void permute (const PERM &g, const PERM &gInv)
 updates transversal after group generators have been conjugated by g
virtual void updateGenerators (const std::map< PERM *, PERMptr > &generatorChange)
 updates transversal after group generators have been exchanged
virtual const ulong & element () const
 returns one element of the orbit
 Transversal (uint n)
 constructor
virtual ~Transversal ()
 virtual destructor
virtual PERM * at (ulong val) const =0
 returns a transversal element $u$ such that $\alpha^u$ equals val
virtual bool trivialByDefinition (const PERM &x, ulong to) const =0
 true if Schreier generator constructed from x and the transversal element related to "to" is trivial by defintion
virtual bool contains (const ulong &val) const
 true iff there exists a transversal element mapping $\alpha$ to val
std::list< ulong >::const_iterator begin () const
 begin iterator of basic orbit
std::list< ulong >::const_iterator end () const
 end iterator of basic orbit
uint size () const
 size of basic orbit / transversal
uint n () const
 size of the set the group is working on
template<class InputIterator >
void sort (InputIterator Bbegin, InputIterator Bend)
 sorts orbit according to order given by list of points
bool sorted () const
 true iff orbit is sorted
virtual void orbit (ulong alpha, const PERMlist &generators)
 computes transversal based on orbit of $\alpha$ under generators
virtual void orbitUpdate (ulong alpha, const PERMlist &generators, const PERMptr &g)
 updates transversal based on orbit of $\alpha$ under generators where g is a new generator
virtual void permute (const PERM &g, const PERM &gInv)
 updates transversal after group generators have been conjugated by g
virtual void updateGenerators (const std::map< PERM *, PERMptr > &generatorChange)
 updates transversal after group generators have been exchanged
virtual const ulong & element () const
 returns one element of the orbit

Protected Member Functions

virtual void registerMove (ulong from, ulong to, const PERMptr &p)
 stores that 'p' maps 'from' onto 'to'
virtual bool foundOrbitElement (const ulong &alpha, const ulong &alpha_p, const PERMptr &p)
 callback when the orbit algorithm constructs an element alpha_p from alpha and p
virtual void registerMove (ulong from, ulong to, const PERMptr &p)
 stores that 'p' maps 'from' onto 'to'
virtual bool foundOrbitElement (const ulong &alpha, const ulong &alpha_p, const PERMptr &p)
 callback when the orbit algorithm constructs an element alpha_p from alpha and p

Protected Attributes

uint m_n
 size of the set the group is working on
std::vector< boost::shared_ptr
< PERM > > 
m_transversal
 transversal elements
std::list< ulong > m_orbit
 orbit elements
bool m_sorted
 true if orbit is sorted (according to a previous sort(InputIterator, InputIterator) call

Friends

std::ostream & operator<< (std::ostream &out, const Transversal< PERM > &p)
 to stream
std::ostream & operator<< (std::ostream &out, const Transversal< PERM > &p)
 to stream

Detailed Description

template<class PERM>
class permlib::Transversal< PERM >

Transversal base class corresponding to a base element $\alpha$.


Constructor & Destructor Documentation

template<class PERM >
permlib::Transversal< PERM >::Transversal ( uint  n  )  [inline]

constructor

Parameters:
n size of the set the group is working on
template<class PERM>
permlib::Transversal< PERM >::Transversal ( uint  n  ) 

constructor

Parameters:
n size of the set the group is working on

Member Function Documentation

template<class PERM>
virtual bool permlib::Transversal< PERM >::foundOrbitElement ( const ulong &  alpha,
const ulong &  alpha_p,
const PERMptr &  p 
) [protected, virtual]

callback when the orbit algorithm constructs an element alpha_p from alpha and p

Returns:
true iff alpha_p is a new element that has not been seen before

Implements permlib::Orbit< PERM, ulong >.

template<class PERM >
bool permlib::Transversal< PERM >::foundOrbitElement ( const ulong &  alpha,
const ulong &  alpha_p,
const PERMptr &  p 
) [inline, protected, virtual]

callback when the orbit algorithm constructs an element alpha_p from alpha and p

Returns:
true iff alpha_p is a new element that has not been seen before

Implements permlib::Orbit< PERM, ulong >.

template<class PERM>
virtual void permlib::Transversal< PERM >::orbit ( ulong  alpha,
const PERMlist &  generators 
) [virtual]

computes transversal based on orbit of $\alpha$ under generators

Parameters:
alpha $\alpha$
generators group generators for the orbit

Reimplemented in permlib::ShallowSchreierTreeTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.

template<class PERM >
void permlib::Transversal< PERM >::orbit ( ulong  alpha,
const PERMlist &  generators 
) [inline, virtual]

computes transversal based on orbit of $\alpha$ under generators

Parameters:
alpha $\alpha$
generators group generators for the orbit

Reimplemented in permlib::ShallowSchreierTreeTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.

template<class PERM>
virtual void permlib::Transversal< PERM >::orbitUpdate ( ulong  alpha,
const PERMlist &  generators,
const PERMptr &  g 
) [virtual]

updates transversal based on orbit of $\alpha$ under generators where g is a new generator

Parameters:
alpha $\alpha$
generators group generators for the orbit
g new generator that the transversal is updated for

Reimplemented in permlib::ShallowSchreierTreeTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.

template<class PERM >
void permlib::Transversal< PERM >::orbitUpdate ( ulong  alpha,
const PERMlist &  generators,
const PERMptr &  g 
) [inline, virtual]

updates transversal based on orbit of $\alpha$ under generators where g is a new generator

Parameters:
alpha $\alpha$
generators group generators for the orbit
g new generator that the transversal is updated for

Reimplemented in permlib::ShallowSchreierTreeTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.

template<class PERM>
virtual void permlib::Transversal< PERM >::permute ( const PERM &  g,
const PERM &  gInv 
) [virtual]

updates transversal after group generators have been conjugated by g

Parameters:
g permutation to conjugate
gInv inverse of g for performance reasons

Reimplemented in permlib::ExplicitTransversal< PERM >, permlib::ShallowSchreierTreeTransversal< PERM >, permlib::ExplicitTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.

template<class PERM >
void permlib::Transversal< PERM >::permute ( const PERM &  g,
const PERM &  gInv 
) [inline, virtual]

updates transversal after group generators have been conjugated by g

Parameters:
g permutation to conjugate
gInv inverse of g for performance reasons

Reimplemented in permlib::ExplicitTransversal< PERM >, permlib::ShallowSchreierTreeTransversal< PERM >, permlib::ExplicitTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.

template<class PERM>
template<class InputIterator >
void permlib::Transversal< PERM >::sort ( InputIterator  Bbegin,
InputIterator  Bend 
) [inline]

sorts orbit according to order given by list of points

Parameters:
Bbegin begin iterator of point list (ulong) inducing an order
Bend end iterator of point list (ulong) inducing an order
template<class PERM >
template<class InputIterator >
void permlib::Transversal< PERM >::sort ( InputIterator  Bbegin,
InputIterator  Bend 
) [inline]

sorts orbit according to order given by list of points

Parameters:
Bbegin begin iterator of point list (ulong) inducing an order
Bend end iterator of point list (ulong) inducing an order
template<class PERM>
virtual void permlib::Transversal< PERM >::updateGenerators ( const std::map< PERM *, PERMptr > &  generatorChange  )  [inline, virtual]

updates transversal after group generators have been exchanged

Parameters:
generatorChange map of old generators to new generators

Reimplemented in permlib::SchreierTreeTransversal< PERM >, permlib::ShallowSchreierTreeTransversal< PERM >, permlib::SchreierTreeTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.

template<class PERM>
virtual void permlib::Transversal< PERM >::updateGenerators ( const std::map< PERM *, PERMptr > &  generatorChange  )  [inline, virtual]

updates transversal after group generators have been exchanged

Parameters:
generatorChange map of old generators to new generators

Reimplemented in permlib::SchreierTreeTransversal< PERM >, permlib::ShallowSchreierTreeTransversal< PERM >, permlib::SchreierTreeTransversal< PERM >, and permlib::ShallowSchreierTreeTransversal< PERM >.


The documentation for this class was generated from the following files:
Generated on Fri Jun 18 22:00:09 2010 for PermLib by  doxygen 1.6.3