Hacker News new | ask | show | jobs
by abetusk 3252 days ago
For context, LLL was used to prove that polynomial factorization can be solved in polynomial time. That is, given r(x) such that:

    r(x) = p(x) * q(x)
where the coefficients of each factor are integral:

    p_i, q_i in Z
LLL can be used to find p(x) and q(x) only given r(x).

There are other problems that LLL solves and there are more modern lattice reduction algorithms (PSLQ, etc.) but LLL was one of the first.

1 comments

There are other problems that LLL solves

My favourite is integer relationship finding. For example, if you stumble across the value 194.927424491 it's straightforward to figure out that it is pi * 23 + e * 29 + sqrt(2) * 31.

So, solving CVP? That's a pretty neat application, though.
The typical way you'd solve that would be to take

    [K * pi      1 0 0]
    [K * e       0 1 0]
    [K * sqrt(2) 0 0 1]
    [K * 194.927424491 0 0 0]
for some large-ish K, say 2^20, and look for a short(est) vector of this lattice. Basically you're minimizing the norm of (a * pi + b * e + c * sqrt(2) + d * 194.927424491, a, b, c) while giving the majority of the weight to the first component, which you hope to be near 0.
look for a short(est) vector of this lattice

Just to elaborate slightly on this: Finding the shortest vector in a lattice is (in general) hard, but finding a vector which is no more than a constant times the length of the shortest vector is easy. So techniques which rely on lattice reduction usually construct a lattice such that the shortest vector is much shorter than the second-shortest vector -- in other words, the shortest vector is the only one which satisfies the "no more than X times the length of the shortest vector" condition.

In the case of integer relation finding, this translates into having enough digits and making the value K large enough.