6 个版本
使用旧的 Rust 2015
0.3.2 | 2016年8月26日 |
---|---|
0.3.1 | 2016年8月25日 |
0.2.0 | 2016年7月27日 |
0.1.1 | 2016年7月24日 |
#305 在 值格式化
48,539 每月下载量
用于 5 个 包(3 个直接使用)
8KB
69 行
Rust 随机选择
根据权重/概率随机选择样本。
优势
- 对于所有权重都均匀分布的情况,具有良好的多样性(与轮盘赌选择算法相比)
- 速度极快:O(n)(轮盘赌选择算法:O(n * log n))
- 内存使用:O(n)
- 权重的总和不必为 1.0,但不能溢出
此算法基于随机均匀抽样算法。
应用
- 进化算法:通过其适应度 fi 选择 n 个最合适的种群
- 蒙特卡洛定位:通过其权重 w 重新采样 n 个粒子
使用方法
将此添加到您的 Cargo.toml
[dependencies]
random_choice = "*"
示例
默认方式
extern crate random_choice;
use self::random_choice::random_choice;
fn main() {
let mut samples = vec!["hi", "this", "is", "a", "test!"];
let weights: Vec<f64> = vec![5.6, 7.8, 9.7, 1.1, 2.0];
let number_choices = 100;
let choices = random_choice().random_choice_f64(&samples, &weights, number_choices);
for choice in choices {
print!("{}, ", choice);
}
}
使用自定义种子
extern crate rand;
extern crate random_choice;
use random_choice::RandomChoice;
use rand::SeedableRng;
fn main() {
let mut samples = vec!["hi", "this", "is", "a", "test!"];
let weights: Vec<f64> = vec![5.6, 7.8, 9.7, 1.1, 2.0];
let rng = rand::StdRng::from_seed(&[5000, 44, 55, 199]);
let mut random_choice = RandomChoice::new(rng);
let number_choices = 100;
let choices = random_choice.random_choice_f64(&mut samples, &weights, number_choices);
for choice in choices {
print!("{}, ", choice);
}
}
依赖关系
~315–540KB