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`

```rust
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.

**Note: the `rand` crate now has [built-in-support for the Alias method](https://rust-random.github.io/rand/rand/distributions/weighted/alias_method/index.html), 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`

```rust
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.

Add note that this library is no longer needed
Add note that this library is no longer needed