Lattice reduction

In mathematics, the goal of lattice basis reduction is given an integer lattice basis as input, to find a basis with short, nearly orthogonal vectors. This is realized using different algorithms, whose running time is usually at least exponential in the dimension of the lattice.
Nearly orthogonal.
One measure of "nearly orthogonal" is the orthogonality defect. This compares the product of the lengths of the basis vectors with the volume of the parallelepiped they define. For perfectly orthogonal basis vectors, these quantities would be the same.
Any particular basis of formula_1 vectors may be represented by a matrix formula_2, whose columns are the basis vectors formula_3. In the fully dimensional case where the number of basis vectors is equal to the dimension of the space they occupy, this matrix is square, and the volume of the fundamental parallelepiped is simply the absolute value of the determinant of this matrix formula_4. If the number of vectors is less than the dimension of the underlying space, then volume is formula_5. For a given lattice formula_6, this volume is the same (up to sign) for any basis, and hence is referred to as the determinant of the lattice formula_7 or lattice constant formula_8.
The orthogonality defect is the product of the basis vector lengths divided by the parallelepiped volume;
From the geometric definition it may be appreciated that formula_10 with equality if and only if the basis is orthogonal.
If the lattice reduction problem is defined as finding the basis with the smallest possible defect, then the problem is NP-hard. However, there exist polynomial time algorithms to find a basis with defect formula_11 
where "c" is some constant depending only on the number of basis vectors and the dimension of the underlying space (if different). This is a good enough solution in many practical applications.
In two dimensions.
For a basis consisting of just two vectors, there is a simple and efficient method of reduction closely analogous to the Euclidean algorithm for the greatest common divisor of two integers. As with the Euclidean algorithm, the method is iterative; at each step the larger of the two vectors is reduced by adding or subtracting an integer multiple of the smaller vector.
The pseudocode of the algorithm, often known as Lagrange's algorithm or the Lagrange-Gauss algorithm, is as follows:
 Input: formula_12 a basis for the lattice formula_13. Assume that formula_14, otherwise swap them.
 Output: A basis formula_12 with formula_16.
 While formula_14: