Below are some references and resources for the LLL algorithm:
* By far the best book on the LLL algorithm that I am aware of is:
In particular, chapter 2 gives the definitions of reduction that we will be using for the project.
N.B: DO ***NOT*** BUY THIS BOOK UNLESS YOUR PROJECT IS ACCEPTED!! YOU WILL NOT NEED IT TO PREPARE YOUR APPLICATION.
However, if you can get it in your library, or on interlibrary loan, by all means get hold of a copy.
* A very nice description of the LLL algorithm (delta reduction only) is here:
Use this as a starting point.
* Here is another:
* Section 1.3 of this thesis is also useful:
The thesis also contains information about various applications of the LLL.
* This set of slides refers to different notions of reduced, including c-reduction, which is one of the parameters we will want our final LLL algorithm to have:
* The implementation of LLL that is closest to what we are after is fpLLL:
* Here is a very nice paper describing the delta-epsilon reduction (there are actually three parameters, alpha, delta, epsilon, but one is dependent on the other two), and the floating point LLL. When you understand the basics, this is the paper you want to refer to:
It also describes the L^2 algorithm, which we basically want to implement.
* There's a serious implementation of LLL in Victor Shoup's NTL. However whilst there are some good ideas in that, it isn't quite what we want to implement.
* Also see the implementation in flint-1.6:
Start by getting to know the original LLL algorithm and some of its applications. Then start to learn a little bit more about the more sophisticated algorithms.
Here are some questions that need some serious thought:
* What floating point types should we use?
-- doubles?
-- extended precision types?
N.B: we do NOT want to use long doubles, quad doubles or the like in flint.
* What integer types should we use?
-- flint fmpz's?
-- C longs/unsigned longs?
-- integers represented exactly in floating point?
* What flint modules should be added?
* Eventually we want to also look at LLL with removal, heuristic LLL and ULLL. But I suggest leaving an understanding of these until after the application process, as they are quite involved. But you should mention that implementing these is an aim of the project.
Bill.