Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <algorithm>
00010 #include <vector>
00011 #include <queue>
00012 #include "groebner_alg.h"
00013 #ifndef PBORI_GB_NF_H
00014 #define PBORI_GB_NF_H
00015 BEGIN_NAMESPACE_PBORIGB
00016 Polynomial add_up_exponents(const std::vector<Exponent>& vec);
00017 Polynomial add_up_monomials(const std::vector<Monomial>& res_vec);
00018 int select1(const GroebnerStrategy& strat, const Polynomial& p);
00019 int select1(const GroebnerStrategy& strat, const Monomial& m);
00020
00021 int select_no_deg_growth(const GroebnerStrategy& strat, const Monomial& m);
00022
00023 static int select_short(const GroebnerStrategy& strat, const Polynomial& p);
00024 static int select_short(const GroebnerStrategy& strat, const Monomial& m);
00025
00026 Polynomial nf1(GroebnerStrategy& strat, Polynomial p);
00027
00028 Polynomial nf2(GroebnerStrategy& strat, Polynomial p);
00029 Polynomial nf2_short(GroebnerStrategy& strat, Polynomial p);
00030
00031 Polynomial nf_delaying(GroebnerStrategy& strat, Polynomial p);
00032 Polynomial nf_delaying_exchanging(GroebnerStrategy& strat, Polynomial p);
00033
00034 class LMLessCompare{
00035 public:
00036 bool operator() (const Polynomial& p1, const Polynomial& p2){
00037 return p1.lead()<p2.lead();
00038 }
00039 };
00040
00041 const int SLIMGB_SIMPLEST=0;
00042 template<int variant> class SlimgbReduction{
00043 private:
00044 GroebnerStrategy* strat;
00045 std::priority_queue<Polynomial, std::vector<Polynomial>, LMLessCompare> to_reduce;
00046 public:
00047 std::vector<Polynomial> result;
00048
00049 SlimgbReduction(GroebnerStrategy& strat){
00050 this->strat=&strat;
00051 }
00052 SlimgbReduction(){}
00053 void addPolynomial(const Polynomial& p);
00054 void reduce();
00055
00056 Polynomial nextResult();
00057 };
00058 template <int variant> void SlimgbReduction<variant>::addPolynomial(const Polynomial& p){
00059 if (!(p.isZero())){
00060 to_reduce.push(p);
00061 }
00062 }
00063 template <int variant> Polynomial SlimgbReduction<variant>::nextResult(){
00064 if (result.size()==0) return Polynomial();
00065 Polynomial res=result.back();
00066 result.pop_back();
00067 return res;
00068 }
00069 typedef SlimgbReduction<SLIMGB_SIMPLEST> slimgb_reduction_type;
00070 std::vector<Polynomial> parallel_reduce(std::vector<Polynomial> inp, GroebnerStrategy& strat, int average_steps, double delay_f);
00071 Polynomial red_tail(const GroebnerStrategy& strat, Polynomial p);
00072 Polynomial red_tail_short(const GroebnerStrategy& strat, Polynomial p);
00073 Polynomial nf3(const GroebnerStrategy& strat, Polynomial p, Monomial rest_lead);
00074 Polynomial nf3_short(const GroebnerStrategy& strat, Polynomial p);
00075 Polynomial red_tail_self_tuning(const GroebnerStrategy& strat, Polynomial p);
00076 Polynomial ll_red_nf(const Polynomial& p,const BooleSet& reductors);
00077
00078 Polynomial ll_red_nf_noredsb(const Polynomial& p,const BooleSet& reductors);
00079 Polynomial add_up_polynomials(const std::vector<Polynomial>& vec);
00080 Polynomial plug_1(const Polynomial& p, const MonomialSet& m_plus_ones);
00081 MonomialSet mod_mon_set(const MonomialSet& as, const MonomialSet &vs);
00082 END_NAMESPACE_PBORIGB
00083 #endif