Crates.io | lllreduce |
lib.rs | lllreduce |
version | 0.0.2 |
source | src |
created_at | 2019-11-20 19:35:42.456654 |
updated_at | 2019-11-20 21:29:11.728988 |
description | A library for running Lenstra-Lenstra-Lovasz (LLL) reduction on lattice bases |
homepage | |
repository | https://github.com/baranyikt/lllreduce-rs |
max_upload_size | |
id | 183052 |
size | 10,815 |
Transforms a lattice's basis into a form in which the first vector of the basis is not "much" longer than the shortest (non-zero) vector of the lattice:
||first basis vector|| <= 2^((n-1)/2) ||shortest vector||
where n
is the dimension of lattice (assuming 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);
}
}
This is the very first, very drafty version, anything can change in it in the future.