Gröbner basis project
Codebase for research into Gröbner basis computation
Polynomial_Linked_List Class Reference

Polynomials represented as a doubly linked list. More...

#include <polynomial_linked_list.hpp>

Inheritance diagram for Polynomial_Linked_List:
Mutable_Polynomial Abstract_Polynomial

Public Member Functions

Construction
 Polynomial_Linked_List (Polynomial_Ring &R, Monomial_Ordering *order=generic_grevlex_ptr)
 initialize to zero
 
 Polynomial_Linked_List (Polynomial_Ring &R, const Monomial &t, Monomial_Ordering *order=nullptr)
 initialize to monomial; monomial is copied
 
 Polynomial_Linked_List (Polynomial_Ring &R, const Prime_Field_Element &c, const Monomial &t, Monomial_Ordering *order=nullptr)
 initialize to monomial and coefficient; monomial is copied
 
 Polynomial_Linked_List (Polynomial_Ring &R, Monomial_Node *node, Monomial_Ordering *order=nullptr)
 initialize to given monomial node: nothing is copied
 
 Polynomial_Linked_List (const Polynomial_Linked_List &other)
 copy constructor: deep copy of monomials
 
 Polynomial_Linked_List (const Abstract_Polynomial &p)
 constructor from abstract polynomial: deep copy of monomials
 
Destruction
virtual ~Polynomial_Linked_List ()
 deletes all monomial nodes
 
Basic properties
bool is_zero () const
 true iff the first node in the list is nullptr or has zero coeff
 
Monomialleading_monomial () const
 Returns the leading monomial — call sort_by_order() first!
 
Prime_Field_Element leading_coefficient () const
 Returns the leading coefficient — call sort_by_order first!
 
unsigned length () const
 Returns the number of polynomials in the list.
 
virtual void set_monomial_ordering (Monomial_Ordering *ord, bool sort_anew=true)
 set the monomial ordering and sort the polynomials (optionally, but by default) More...
 
Computation
virtual Polynomial_Linked_Listzero_polynomial () const
 Returns as simple a zero polynomial as I can muster, short of this being nullptr.
 
virtual Polynomial_Linked_Listmonomial_multiple (const Monomial &u) const
 Returns a new polynomial whose value is \(\textit{this}\times u\).
 
virtual Polynomial_Linked_Listscalar_multiple (const Prime_Field_Element &c) const
 Returns a new polynomial whose value is \(\textit{this}\times c\).
 
virtual Polynomial_Linked_Listoperator+= (const Abstract_Polynomial &other)
 Adds other to this, and returns the result.
 
virtual Polynomial_Linked_Listoperator-= (const Abstract_Polynomial &other)
 Subtracts other from this, and returns the result.
 
virtual void add_polynomial_multiple (const Prime_Field_Element &a, const Monomial &t, const Abstract_Polynomial &q, bool subtract)
 "Fast" addition of \(atq\) to this. More...
 
virtual void sort_by_order ()
 Sort by specified weight order.
 
Iteration
virtual LLPolynomial_Iteratornew_iterator () const
 an iterator that poses no risk of modifying the polynomial
 
virtual Polynomial_Iteratorbegin () const
 an iterator that poses no risk of modifying the polynomial
 
virtual Polynomial_Iteratorend () const
 an iterator that poses no risk of modifying the polynomial
 
virtual LLPolynomial_Iteratornew_mutable_iterator ()
 An iterator that may modify the current position.
 
Modification
virtual Polynomial_Linked_Listdetach_head ()
 Detach and return leading term.
 
virtual void add_last (const Prime_Field_Element &c, const Monomial &t)
 Add this monomial as the last leading term.
 
- Public Member Functions inherited from Mutable_Polynomial
 Mutable_Polynomial (Polynomial_Ring &R, Monomial_Ordering *ordering=generic_grevlex_ptr)
 constructor
 
virtual ~Mutable_Polynomial ()=0
 destructor
 
virtual void multiply_by_scalar (const Prime_Field_Element &a)
 multiply by scalar
 
virtual void multiply_by_monomial (const Monomial &t)
 multiply by monomial
 
virtual void reduce_by (const Abstract_Polynomial &p)
 reduce by \(p\) until no further reduction possible
 
- Public Member Functions inherited from Abstract_Polynomial
 Abstract_Polynomial (Polynomial_Ring &ring, Monomial_Ordering *ordering)
 
virtual ~Abstract_Polynomial ()
 
Polynomial_Ringbase_ring () const
 ring in which this polynomial resides
 
Prime_Fieldground_field ()
 ground field – all coefficients should be in this field
 
unsigned number_of_variables () const
 number of variables – all monomials should agree with this (though it is never tested by the class)
 
Monomial_Orderingmonomial_ordering () const
 reports leading monomial’s monomial ordering
 
virtual bool can_reduce (Abstract_Polynomial &other) const
 can this reduce other?
 
virtual Poly_Strategy_Datastrategy () const
 strategy related information
 
virtual DEG_TYPE standard_degree () const
 maximum sum of exponents for any monomial
 
virtual DEG_TYPE weighted_degree (const WT_TYPE *w=nullptr) const
 weighted sum of exponents for any monomial More...
 
void set_strategy (Poly_Strategy_Data *psd)
 sets the polynomial’s strategy to psd
 
virtual void print (ostream &os=cout) const
 
virtual void println (ostream &os=cout) const
 
virtual void printlncout () const
 

Protected Attributes

Monomial_Nodehead
 first monomial in the list, returned by leading_monomial()
 
- Protected Attributes inherited from Abstract_Polynomial
Polynomial_RingR
 data about polynomial ring
 
Poly_Strategy_Datastrat = nullptr
 data for computational strategies
 

Friends

class LLPolynomial_Iterator
 

Detailed Description

Polynomials represented as a doubly linked list.

Author
John Perry
Date
2015

Definition at line 154 of file polynomial_linked_list.hpp.

Member Function Documentation

◆ add_polynomial_multiple()

void Polynomial_Linked_List::add_polynomial_multiple ( const Prime_Field_Element a,
const Monomial t,
const Abstract_Polynomial q,
bool  subtract 
)
virtual

"Fast" addition of \(atq\) to this.

If subtract==true, subtract instead.

Implements Mutable_Polynomial.

Definition at line 386 of file polynomial_linked_list.cpp.

◆ set_monomial_ordering()

void Polynomial_Linked_List::set_monomial_ordering ( Monomial_Ordering order,
bool  sort_anew = true 
)
virtual

set the monomial ordering and sort the polynomials (optionally, but by default)

Warning
In most cases you will want to sort anew immediately after setting the ordering. Otherwise, the monomials may be in the wrong order! That is therefore the default behavior of this function, but in case you don’t want to sort, that option is provided.

Implements Abstract_Polynomial.

Definition at line 223 of file polynomial_linked_list.cpp.


The documentation for this class was generated from the following files: