SchreierSims

template<size_t N, typename TPointType = typename SmallestInteger<N>::type, typename TElementType = LeastPerm<N>, typename TTraits = SchreierSimsTraits<N, TPointType, TElementType>>
class SchreierSims : private libsemigroups::detail::BruidhinnTraits<LeastPerm<N>>

Defined in schreier-sims.hpp.

This class implements a deterministic version of the Schreier-Sims algorithm acting on a relatively small number of points (< 1000).

See also

SchreierSimsTraits.

Example
SchreierSims<5> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({1, 0, 2, 3, 4}));
S.add_generator(Perm({1, 2, 3, 4, 0}));
S.size(); // 120

Template Parameters:
  • N – the largest point not fixed by the permutations in the permutation group to be represented by this.

  • TPointType – the type of the points acted on (default: the member type of SmallestInteger with template parameter N).

  • TElementType – the type of the group elements acting on TPointType (default: the member type of LeastPerm with template parameter N).

  • TTraits – the type of traits object (default: SchreierSimsTraits with template parameters N, TPointType, and TElementType).

Member types

domain_type

Type of the object containing all points acted on.

element_type

index_type

Type of indices.

point_type

Adapter types

Action

Degree

EqualTo

Inverse

One

Product

Swap

Constructors

SchreierSims()

SchreierSims(SchreierSims &&) = default

Default move constructor.

Deleted constructors

SchreierSims(SchreierSims const &) = delete

Deleted.

operator=(SchreierSims &&) = delete

Deleted.

operator=(SchreierSims const &) = delete

Deleted.

Initialisation

add_base_point(point_type)

add_generator(const_element_reference)

clear()

Running

run()

Attributes

base(index_type) const

base_size() const noexcept

empty()

finished() const

generator(index_type) const

identity() const

inversal_element(index_type, point_type)

number_of_generators() const noexcept

number_of_strong_generators(index_type) const

orbits_lookup(index_type, point_type)

size()

strong_generator(index_type,index_type) const

transversal_element(index_type, point_type)

Membership

contains(const_element_reference)

sift(const_element_reference)