#概率分布 #别名 #随机 #概率

no-std loaded_dice

一个简单的加载骰子采样器,实现了别名方法

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数据结构

Download history 563/week @ 2024-03-14 528/week @ 2024-03-21 431/week @ 2024-03-28 874/week @ 2024-04-04 919/week @ 2024-04-11 1220/week @ 2024-04-18 784/week @ 2024-04-25 762/week @ 2024-05-02 450/week @ 2024-05-09 1202/week @ 2024-05-16 608/week @ 2024-05-23 261/week @ 2024-05-30 57/week @ 2024-06-06 10/week @ 2024-06-13 43/week @ 2024-06-20 8/week @ 2024-06-27

每月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