2 个版本
0.0.2 | 2019 年 11 月 20 日 |
---|---|
0.0.1 | 2019 年 11 月 20 日 |
#601 in 科学
10KB
196 行
Lenstra-Lenstra-Lovász (LLL) 约简
将格的基转换为一个形式,其中基的第一个向量不比格的最短(非零)向量“长得多”
||第一个基向量|| <= 2^((n-1)/2) ||最短向量||
其中 n
是格的维度(假设 LOVASZ_FACTOR = 4.0/3.0
)。
用法
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);
}
}
注意
这是第一个,非常草稿的版本,将来可能会对其进行任何更改。