6 个版本
0.1.7 | 2021 年 9 月 30 日 |
---|---|
0.1.6 | 2021 年 9 月 29 日 |
0.1.3 | 2019 年 10 月 2 日 |
在 算法 中排名 1262
每月下载量 477
用于 10 个 仓库(6 个直接使用)
12KB
201 行
shuffle
Rust 的各种洗牌算法。
目前实现的洗牌算法
- 逆洗牌
- Fisher-Yates
- ... ? TODO
示例
use shuffle::shuffler::Shuffler;
use shuffle::irs::Irs;
use rand::rngs::mock::StepRng;
let mut rng = StepRng::new(2, 13);
let mut irs = Irs::default();
let mut input = vec![1, 2, 3, 4, 5];
irs.shuffle(&mut input, &mut rng);
assert_eq!(&input, &[4, 1, 5, 3, 2]);
lib.rs
:
实现各种洗牌算法的仓库,如逆洗牌(更多算法即将推出)。
为什么
目前,洗牌集合最常见的方式是使用 rand::shuffle
,这实际上是 Fisher-Yates 算法。这很好,但需要你有一个任意范围内的良好随机数源。
这个仓库旨在在只有随机数源的情况下提供良好的抽象来洗牌集合。(但我们也实现了 Fisher-Yates,因为为什么不呢?)
假设随机数源是良好的,所有洗牌算法都从均匀分布返回一个排列。
示例
use shuffle::shuffler::Shuffler;
use shuffle::irs::Irs;
use rand::rngs::mock::StepRng;
let mut rng = StepRng::new(2, 13);
let mut irs = Irs::default();
let mut input = vec![1, 2, 3, 4, 5];
irs.shuffle(&mut input, &mut rng);
assert_eq!(&input, &[4, 1, 5, 3, 2]);
依赖
~1MB
~26K SLoC