#selection #wheel #alias #die #loaded

roulette

轮盘赌选择的高效实现

3 个版本 (破坏性)

使用旧的 Rust 2015

0.3.0 2020 年 11 月 20 日
0.2.0 2018 年 8 月 13 日
0.1.0 2016 年 1 月 18 日

#248模拟

25 每月下载量

MIT 许可证

7KB
86 代码行

注意:现在 rand 包有了对 别名方法的内置支持,因此此库不再需要。

使用别名方法的 Rust 实现轮盘赌选择。这可以用来模拟一个装有重量的骰子以及类似的情况。

初始化需要 O(n) 的时间;选择一个随机元素需要 O(1) 的时间。这比原始算法快得多(其中最常见的是通常被称为“轮盘赌选择”)。有关算法的深入解释,请参阅 http://www.keithschwarz.com/darts-dice-coins/

此代码是从 http://www.keithschwarz.com/interesting/code/?dir=alias-method 翻译过来的。

示例

使用 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);
  }
}

在这个示例中,rand 有 40% 的概率是 'a',40% 的概率是 'b',20% 的概率是 'c'。

依赖项

~535KB
~10K SLoC