00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef CLASSIC_SET_STABILIZER_SEARCH_H_
00034 #define CLASSIC_SET_STABILIZER_SEARCH_H_
00035
00036 #include <permlib/search/classic/backtrack_search.h>
00037 #include <permlib/predicate/setwise_stabilizer_predicate.h>
00038
00039 namespace permlib {
00040 namespace classic {
00041
00043 template<class BSGSIN,class TRANSRET>
00044 class SetStabilizerSearch : public BacktrackSearch<BSGSIN,TRANSRET> {
00045 public:
00046 typedef typename BacktrackSearch<BSGSIN,TRANSRET>::PERM PERM;
00047
00049
00053 SetStabilizerSearch(const BSGSIN& bsgs, uint pruningLevelDCM);
00054
00056
00060 template<class InputIterator>
00061 void construct(InputIterator begin, InputIterator end);
00062 };
00063
00064 template<class BSGSIN,class TRANSRET>
00065 SetStabilizerSearch<BSGSIN,TRANSRET>::SetStabilizerSearch(const BSGSIN& bsgs, uint pruningLevelDCM)
00066 : BacktrackSearch<BSGSIN,TRANSRET>(bsgs, pruningLevelDCM, true)
00067 { }
00068
00069 template<class BSGSIN,class TRANSRET>
00070 template<class InputIterator>
00071 void SetStabilizerSearch<BSGSIN,TRANSRET>::construct(InputIterator begin, InputIterator end) {
00072 SetwiseStabilizerPredicate<PERM>* stabPred = new SetwiseStabilizerPredicate<PERM>(begin, end);
00073
00074 this->m_limitLevel = stabPred->limit();
00075 this->m_limitBase = this->m_limitLevel;
00076 this->m_limitInitialized = true;
00077
00078 BacktrackSearch<BSGSIN,TRANSRET>::construct(stabPred, false);
00079 }
00080
00081 }
00082 }
00083
00084 #endif // -- CLASSIC_SET_STABILIZER_SEARCH_H_