4 个版本
0.2.2 | 2022年10月15日 |
---|---|
0.2.1 | 2020年5月23日 |
0.1.1 | 2017年9月22日 |
0.1.0 | 2017年9月19日 |
#712 在 数据结构
每月125次下载
用于 grammartec
20KB
108 行
加载骰子
一个简单的crate,实现了使用别名方法实现的随机采样器(https://en.wikipedia.org/wiki/Alias_method)。它可以高效地从离散概率分布中进行采样(每个样本O(1)
)。用户通过向构造函数传递一个概率向量来使用它。构造函数以O(n*n*log(n))
(注意:实际上完全有可能以O(n*log(n))
实现这个方法,但是对于合理的值数量,这种方法比使用更高效的数据结构要快。如果构建过程很慢,可以考虑使用最小/最大堆而不是在每次构建步骤后对数组进行排序)。然后可以使用此数据结构来从0到n之间的数字进行采样,并具有相应的概率。
假设我们想从一个以下分布中进行采样:p(0)=0.5, p(1)=0.3, p(2)=0.1, p(3)=0.1
extern crate loaded_dice;
extern crate rand;
use loaded_dice::LoadedDiceSampler;
use rand::{thread_rng, Rng};
fn main() {
let mut s = LoadedDiceSampler::new(vec!(0.5, 0.3, 0.1, 0.1), thread_rng());
let iter: usize = 100;
for i in (0..iter) {
println!("{}", s.sample());
}
}
依赖项
~240–440KB