Crates.io | elias-fano |
lib.rs | elias-fano |
version | 1.1.0 |
source | src |
created_at | 2018-07-15 11:50:30.291252 |
updated_at | 2019-06-05 11:26:32.13079 |
description | An implementation of Elias-Fano encoding in Rust |
homepage | |
repository | https://github.com/tomarrell/rust-elias-fano |
max_upload_size | |
id | 74340 |
size | 14,479 |
Elias-Fano encoding in Rust.
The Elias-Fano encoding scheme is a quasi-succinct compression method for monotonic integers using gap compression on a Bitset. It allows for decompression of a bit at any position in O(1)
time complexity.
Being quasi-succinct, it is therefore almost as good as the best theoretical possible compression as determined by the Shannon-Hartley theorem.
This implementation is based largely on one written in Go by Antonio Mallia, which can be found at his repository amallia/go-ef.
Add the following line to your Cargo.toml:
[dependencies]
+ elias-fano = "1.1.0"
extern crate elias_fano;
use elias_fano::EliasFano;
fn main() {
let sorted_array = [0, 3, 40, 1000];
let size = sorted_array.len();
let mut ef = EliasFano::new(sorted_array[size - 1], size as u64);
ef.compress(sorted_array.iter());
println!("{}", ef.value()); // 1
match ef.next() {
Ok(val) => println!("Retrieved value: {}", val), // 3
Err(error) => println!("Err: {}", error), // Out of bounds
}
let _ = ef.next();
println!("{}", ef.value()); // 40
ef.reset();
println!("{}", ef.value()); // 0
let _ = ef.visit(3);
println!("{}", ef.value()); // 1000
}
MIT licensed, see LICENSE for more details.