3 releases (breaking)
Uses old Rust 2015
0.3.0 | Nov 20, 2020 |
---|---|
0.2.0 | Aug 13, 2018 |
0.1.0 | Jan 18, 2016 |
#279 in Simulation
7KB
86 lines
Note: the rand
crate now has built-in-support for the Alias method, so this library is no longer needed.
A Rust implementation of roulette wheel selection using the Alias Method. This can be used to simulate a loaded die and similar situations.
Initialization takes O(n) time; choosing a random element takes O(1) time. This is far faster than naive algorithms (the most common of which is commonly known as 'roulette wheel selection'). For an in-depth explanation of the algorithm, see http://www.keithschwarz.com/darts-dice-coins/.
This code was translated from http://www.keithschwarz.com/interesting/code/?dir=alias-method.
Example
Run example with cargo run --example simple
extern crate rand;
extern crate roulette;
use roulette::Roulette;
fn main() {
let mut rng = rand::thread_rng();
let roulette = Roulette::new(vec![
('a', 1.0), ('b', 1.0), ('c', 0.5), ('d', 0.0)]);
for _ in 0..10 {
let rand = roulette.sample(&mut rng);
println!("{}", rand);
}
}
In this example, rand
will be 'a' with 40% probability, 'b' with 40% probability, and 'c' with 20% probability.
Dependencies
~1.4–2MB
~36K SLoC