Algoritmo LLL
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
editarLa 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:
- (Tamaño reducido) Para . Por definición, esta propiedad garantiza la reducción de la longitud de la base.
- (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
editarLLL 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- ↑ Lenstra, A. K.; Lenstra, H. W., Jr.; Lovász, L. (1982). «Factoring polynomials with rational coefficients». Mathematische Annalen 261 (4): 515-534. MR 0682664. doi:10.1007/BF01457454. hdl: 1887/3810.
Véase también
editarBibliografía
editar- Napias, Huguette (1996). «A generalizaion of the LLL algorithm over euclidean rings or orders». J. The. Nombr. Bordeaux 8 (2): 387-396.
- Cohen, Henri (2000). A course in computational algebraic number theory. GTM 138. Springer. ISBN 3-540-55640-0.
- Borwein, Peter (2002). Computational Excursions in Analysis and Number Theory. ISBN 0-387-95444-9.
- Luk, Franklin T.; Qiao, Sanzheng (2011). «A pivoted LLL algorithm». Lin. Alg. Appl. 434: 2296-2307. doi:10.1016/j.laa.2010.04.003.