TheGrigorchukGroupAlgorithms.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _TheGrigorchukGroupAlgorithms_h_
00011 #define _TheGrigorchukGroupAlgorithms_h_
00012
00013
00014
00015 #include "map"
00016 #include "list"
00017 #include "set"
00018 using namespace std;
00019
00020 #include "tuples.h"
00021 #include "Word.h"
00022
00023
00024
00025
00026
00027
00028
00030
00036 class TheGrigorchukGroupAlgorithms
00037 {
00038
00040
00041
00042
00044
00045 public:
00046
00048 TheGrigorchukGroupAlgorithms( );
00049
00050
00052
00053
00054
00056
00057 public:
00058
00059
00061
00065 static bool trivial( const Word& w );
00066
00067
00069
00073 static bool trivial_reduced( const Word& w );
00074
00075
00077
00078
00079
00080
00081
00082 static triple< int , int , int > abelianImage( const Word& w );
00083
00084
00086
00089 static Word reduce( const Word& w );
00090
00091
00093
00096 static int findOrder( const Word& w );
00097
00098
00100
00101
00102
00103 static bool conjugate( const Word& w1 , const Word& w2 ) {
00104 return conjugate_Kcosets( w1 , w2 ).size()!=0;
00105 }
00106
00107
00109
00110
00111
00112
00113
00114 static set< int > conjugate_Kcosets( const Word& w1 , const Word& w2 );
00115
00116
00118
00119
00120
00121 static set< Word > findConjugator_Kcosets( const Word& w1 , const Word& w2 );
00122
00123
00125
00129 static pair< Word , Word > split( const Word& w );
00130
00131
00133
00134
00135
00137
00138 public:
00139
00141 static void push_back( Word& w , int g );
00142
00143
00145 static void push_front( Word& w , int g );
00146
00147
00149 static Word randomWord( int len );
00150
00151
00153
00154
00155
00157
00158 public:
00159
00161
00166 static pair< Word , list< Word > > decompositionBSbgp( const Word& w );
00167
00168
00169
00171
00176 static pair< Word , Word > liftToSTone( const Word& w1 , const Word& w2 );
00177
00178
00180
00181
00182
00183
00184
00185 static int cosetRepresentativeKSbgp( const Word& w );
00186
00187
00189
00190
00191
00192
00193
00194 static Word cosetRepresentativeKSbgp( int c );
00195
00196
00198
00202 static int liftPairKcosetsUP( int x , int y );
00203
00204
00206
00209 static set< int > liftPairsKcosetsUP( const set< int >& K1 , const set< int >& K2 );
00210
00211
00213
00214
00215
00217
00218 private:
00219 public:
00220
00222 static map< pair< int , int > , int > KCosetLiftTable( );
00223
00225
00226
00227
00229
00230 private:
00231
00232 };
00233
00234
00235 #endif