#lattice #reduction #numeric #lll #lovasz

lllreduce

一个用于在格基上进行 Lenstra-Lenstra-Lovász (LLL) 约简的库

2 个版本

0.0.2 2019 年 11 月 20 日
0.0.1 2019 年 11 月 20 日

#601 in 科学

MIT 许可证

10KB
196

Lenstra-Lenstra-Lovász (LLL) 约简

将格的基转换为一个形式,其中基的第一个向量不比格的最短(非零)向量“长得多”

||第一个基向量|| <= 2^((n-1)/2) ||最短向量||

其中 n 是格的维度(假设 LOVASZ_FACTOR = 4.0/3.0)。

LLL 约简在维基百科

用法


use lllreduce::{
		Basetype, 
        gram_schmidt_with_coeffs, 
        lll_reduce};

fn main() {
	let original_mtx : std::vec::Vec<std::vec::Vec::<Basetype>> = vec![
		vec![0.0,3.0,4.0,7.0,8.0],
		vec![1.0,0.0,1.0,8.0,7.0],
		vec![1.0,1.0,3.0,5.0,6.0],
		vec![0.0,3.0,4.0,7.0,6.0],
		vec![0.0,3.0,4.0,8.0,9.0]
	];
    let mut mtxtuple = lllreduce::gram_schmidt_with_coeffs(original_mtx);
	lll_reduce(&mut mtxtuple);
    println!("\tLLL-reduced basis");
    for a in &mtxtuple.2 {
        println!("\t\t{:?}", a);
    }    
    println!("\tumtx");
    for a in &mtxtuple.0 {
        println!("\t\t{:?}", a);
    }
    println!("\tqmtx");
    for a in &mtxtuple.1 {
        println!("\t\t{:?}", a);
    }
}

注意

这是第一个,非常草稿的版本,将来可能会对其进行任何更改。

无运行时依赖