# Vose Alias A Rust implementation of the Vose-Alias Algorithm. This algorithm allows to sample an element from a list given a discrete probability distribution. For a vecotr of `n` elements, the initialization time is `O(n)`, the sampling time is `O(1)`, and the memory usage is `O(n)`. ## Usage Add this to your `Cargo.toml` ```toml [dependencies] vose-alias = "1.0.0" ``` ## Example ```rust use vose_alias::VoseAlias let va = VoseAlias::new(vec!["orange", "yellow", "green", "turquoise", "grey", "blue", "pink"], vec![0.125, 0.2, 0.1, 0.25, 0.1, 0.1, 0.125]); let element = va.sample(); ``` ## Crate functionalities This crate provides a `VoseAlias` structure, that stores the list of elements given by the user of the library, as well as the probability and alias tables. The probability and alias tables are created by the `new` function. The crate also provides a `sample` function, that allows to sample an element from the element vector in constant time. The function returns the element directly. ## External Resources For a description of the method implemented as well as the algorithm (in pseudo-code), see [[https://www.keithschwarz.com/darts-dice-coins/]]