reservoir-sampling

Crates.ioreservoir-sampling
lib.rsreservoir-sampling
version0.5.1
sourcesrc
created_at2020-12-17 10:23:23.159325
updated_at2021-04-27 15:14:12.451975
descriptionImplementations of a variety of algorithms for reservoir sampling in Rust.
homepage
repositoryhttps://github.com/DesmondWillowbrook/rs-reservoir-sampling
max_upload_size
id323877
size22,976
Kartavya Vashishtha (DesmondWillowbrook)

documentation

README

Gitpod ready-to-code Crates.io

reservoir-sampling

Crate implementing reservoir sampling, a method for getting random samples from a source in a single pass. Useful in situations where size of source is unknown or very large. Read this article for more information: https://en.wikipedia.org/wiki/Reservoir_sampling

All algorithms implemented here have been taken from this article only.


(This crate supports WASM)

Quickstart

use reservoir_sampling::unweighted::l;

fn main () {
    let mut sampled_arr = vec![0usize; 10];

    l(0usize..100, sampled_arr.as_mut_slice());
    println!("Sampled array: {:?}", sampled_arr);
}

API Design

Functions take:

  • An Iterator over generic type T, with no constraints which serves as a stream of data to sample.
  • Mutable array slice (&mut [T]) to store sampled data

By default, functions use rand::thread_rng to provide RNG. To use your own RNG which implements rand::RNG, use functions in reservoir_sampling::core.

Future development:

Stabilize weighted and implement more algorithms.

Commit count: 45

cargo fmt