permlib
0.2.9
Library for permutation computations
Toggle main menu visibility
Loading...
Searching...
No Matches
include
permlib
abstract_permutation_group.h
1
// ---------------------------------------------------------------------------
2
//
3
// This file is part of PermLib.
4
//
5
// Copyright (c) 2009-2012 Thomas Rehn <thomas@carmen76.de>
6
// All rights reserved.
7
//
8
// Redistribution and use in source and binary forms, with or without
9
// modification, are permitted provided that the following conditions
10
// are met:
11
// 1. Redistributions of source code must retain the above copyright
12
// notice, this list of conditions and the following disclaimer.
13
// 2. Redistributions in binary form must reproduce the above copyright
14
// notice, this list of conditions and the following disclaimer in the
15
// documentation and/or other materials provided with the distribution.
16
// 3. The name of the author may not be used to endorse or promote products
17
// derived from this software without specific prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
//
30
// ---------------------------------------------------------------------------
31
32
#include <vector>
33
#include <list>
34
#include <set>
35
36
#include <boost/cstdint.hpp>
37
#include <boost/foreach.hpp>
38
#include <boost/dynamic_bitset.hpp>
39
40
#include <permlib/common.h>
41
42
#ifndef ABSTRACT_PERMUTATION_GROUP_H_
43
#define ABSTRACT_PERMUTATION_GROUP_H_
44
45
namespace
permlib {
46
48
enum
AbstractGroupType {
49
AGT_BSGS = 1,
50
AGT_SymmetricProduct = 2
51
};
52
54
class
AbstractPermutationGroup
{
55
public
:
57
virtual
~AbstractPermutationGroup
() {}
58
60
template
<
typename
Integer>
61
Integer
order
()
const
;
62
64
boost::uint64_t
order
()
const
;
65
67
71
virtual
AbstractPermutationGroup
*
setStabilizer
(
const
std::vector<dom_int>& s)
const
= 0;
72
74
typedef
std::list<std::set<dom_int> >
OrbitList
;
76
virtual
OrbitList
*
orbits
()
const
= 0;
78
82
virtual
OrbitList
*
orbits
(
const
std::vector<dom_int>& s)
const
= 0;
83
85
90
virtual
bool
isLexMinSet
(
const
std::vector<dom_int>& setIndices,
const
std::vector<dom_int>& rankIndices)
const
= 0;
91
93
virtual
AbstractGroupType
type
()
const
= 0;
94
protected
:
96
virtual
void
transversalSizes
(std::vector<unsigned long>& sizes)
const
= 0;
97
};
98
99
100
template
<
typename
Integer>
101
Integer
AbstractPermutationGroup::order
()
const
{
102
Integer orderValue(1);
103
std::vector<unsigned long> sizes;
104
transversalSizes
(sizes);
105
BOOST_FOREACH(
const
unsigned
long
&s, sizes) {
106
orderValue *= s;
107
}
108
return
orderValue;
109
}
110
111
inline
boost::uint64_t
AbstractPermutationGroup::order
()
const
{
112
return
order<boost::uint64_t>
();
113
}
114
115
}
// end NS
116
117
#endif
permlib::AbstractPermutationGroup
A high level interface for a permutation group.
Definition
abstract_permutation_group.h:54
permlib::AbstractPermutationGroup::isLexMinSet
virtual bool isLexMinSet(const std::vector< dom_int > &setIndices, const std::vector< dom_int > &rankIndices) const =0
checks whether a set is lexicographically minimal with respect to a given ordering of indices
permlib::AbstractPermutationGroup::orbits
virtual OrbitList * orbits(const std::vector< dom_int > &s) const =0
computes all orbits which contain a given set of elements
permlib::AbstractPermutationGroup::orbits
virtual OrbitList * orbits() const =0
computes all orbits
permlib::AbstractPermutationGroup::order
Integer order() const
order of the group
Definition
abstract_permutation_group.h:101
permlib::AbstractPermutationGroup::transversalSizes
virtual void transversalSizes(std::vector< unsigned long > &sizes) const =0
fills a list with sizes of transversals along a stabilizer chain
permlib::AbstractPermutationGroup::~AbstractPermutationGroup
virtual ~AbstractPermutationGroup()
destructor
Definition
abstract_permutation_group.h:57
permlib::AbstractPermutationGroup::setStabilizer
virtual AbstractPermutationGroup * setStabilizer(const std::vector< dom_int > &s) const =0
computes the stabilizer of a set
permlib::AbstractPermutationGroup::type
virtual AbstractGroupType type() const =0
implementation type of this abstract class
permlib::AbstractPermutationGroup::OrbitList
std::list< std::set< dom_int > > OrbitList
typedef for a list of orbits, each of which is a set
Definition
abstract_permutation_group.h:74
Generated on
for permlib by
1.17.0