El algoritmo de simplificación de bases de retículos de Lenstra–Lenstra–Lovász (LLL) es un algoritmo de simplificación de retículos de complejidad polinomial inventado por Arjen Lenstra, Hendrik Lenstra y László Lovász en 1982.[1]​ Dada una base con coordenadas enteras n-dimensionales , de un retículo L en Rn con , el algoritmo LLL devuelve una base del retículo LLL-reducida (pequeña, casi ortogonal) en tiempo

donde B es la longitud más larga de los bajo la norma euclídea.

Las aplicaciones originales eran dar algoritmos de complejidad polinomial para factorizar polinomios que coeficientes racionales, para encontrar aproximaciones racionales simultáneas a los números reales, y para resolver el problema de la programación lineal entera en dimensiones fijadas.

Simplificación del LLL editar

La definición exacta de LLL-reducido es la siguiente: Dada una base

 

se definen su base ortogonal obtenida por el proceso de ortogonalización de Gram-Schmidt

 

y los coeficientes de Gram-Schmidt

 , para cada  .

Entonces la base   es LLL-reducida si existe un parámetro   en (0.25,1] tal que se cumplen las siguientes condiciones:

  1. (Tamaño reducido) Para  . Por definición, esta propiedad garantiza la reducción de la longitud de la base.
  2. (Condición de Lovász) Para k = 2,3,..,n  .

Llegados a este punto, estimando el valor del parámetro , podemos concluir cómo de bien se reduce la base. A mayores valores de   mayores reducciones de la base. Inicialmente, A. Lenstra, H. Lenstra and L. Lovász demostraron el algoritmo de simplificación LLL algoritmo para  . Nótese que si bien el algoritmo de simplificación LLL está bien definido para  , la complejidad de tiempo polinomial está garantizada solo para   .

El algoritmo LLL calcula bases LLL-reducidas. No se conoce un algoritmo eficiente que calcule una base cuyos vectores sean tan pequeños como sea posible para retículos de dimensiones mayores que 4. Sin embargo, una base LLL-reducida es casi tan pequeña como sea posible, en le sentido de que hay unas cotas absolutas   tal que el primer vector de la base no es más de   veces más largo que el vector más corto del retículo, el segundo vector de la base es igualmente   más largo como máximo que el segundo vector más corto, y así sucesivamente.

Implementaciones en lenguajes computacionales editar

LLL está implementado en

  • Arageli como la función lll_reduction_int.
  • fpLLL como implementación que se ejecuta en local.
  • GAP como la función LLLReducedBasis.
  • Macaulay2 como la función LLL en el paquete LLLBases.
  • Magma como las funciones LLL y LLLGram (tomando una matriz de Gram).
  • Maple como la función IntegerRelations[LLL].
  • Mathematica como la función LatticeReduce.
  • Number Theory Library (NTL) como la función LLL.
  • PARI/GP como la función qflll.
  • Pymatgen como la función analysis.get_lll_reduced_lattice.
  • Sage como el método LLL llevado a cabo por fpLLL y NTL.

Referencias editar

Véase también editar

Bibliografía editar