Polynomial systems play a fundamental role in many areas of mathematics and science in general. In this course, we are mainly concerned with polynomials over finite fields and the field of rational numbers. We shall consider some basic problems that arise in coding theory, cryptography, computational complexity, and symbolic computation.
We shall first consider polynomial systems and related problems over finite
fields. For simplicity, let's start with the finite field
where addition and multiplication are done modulo 2, or equivalently
addition corresponds to XOR and multiplication corresponds to AND.
Either of the two operations is called a bit operation.
Further, let
be the ring of all polynomials in n variables
with coefficients from
,
and let
denote
the set of n-tuples (or n-bit strings) over
,
which is a vector space of dimension n over
.
An n-tuple in
is also called a vector or a point.
For any system of polynomials
,
an n-tuple
is called a common zero,
or simply a zero, or a solution, of the system if
Problem 1.1 is a decision problem; the answer is simply
a yes or no. Problem 1.2 asks for more,
namely, actually finding a common zero whenever it exists.
Problem 1.3 also asks for more than that of
Problem 1.1, since if one can find the number of common zeroes
then one knows for sure whether the system has a zero or not.
A naive method to solving these problems would be the brute-force or
exhaustive approach:
plug each of the 2n points in
into the polynomials and check if
they evaluate to zero. All the three problems are solved at once.
In a worst-case scenario, this approach requires at least O(m2n) bit
operations, which is exponential in n.
Can we do any better than this? That is, is there an algorithm to solve these problems using a polynomial number of bit operations? Let's look at some special cases.
Linear Systems
Consider the following example:
How many bit operations does the Gaussian elimination method need?
Suppose that H is an
matrix over
.
Then in the worst case one needs to eliminate m columns and eliminating
each column (including backward substitution) involves at most (m-1)
row operations, namely (m-1) additions of n-bit strings.
One needs at most
m(m-1)n = O(m2n) bit operations.
Hence the Gaussian elimination method runs in cubic time
when
.
Essentially, we have proved the following result.
Note the solutions of the above system can also be written as follows:
Now we put some restrictions on the solutions. The Hamming weight of an n-tuple is defined to be the number of its nonzero entries.
The performance of a code depends not only on its minimum distance but also on its weight distribution. To evaluate a code, it is critical to be able to find the number of code words with any given weight.
We shall see later that Problems 1.4 and 1.5 are NP-complete and Problems 1.6 and 1.7 are NP-hard.
Finally, if there is no restriction on the solutions but the matrix Hhas some special structure, can one solve the system Hx=b faster than cubic time? We shall see on the one hand that in decoding of several classes of codes such as Reed-Solomon codes, BCH codes or possibly Hermitian codes, the matrix H is of Toeplitz type. On the other hand, linear systems arise from breaking public-key cryptosystems or from symbolic computation have few nonzero entries. In both cases, we say that the matrix H is sparse. It is desirable to have fast algorithms to solve sparse systems.