6 个版本

0.1.7 2021 年 9 月 30 日
0.1.6 2021 年 9 月 29 日
0.1.3 2019 年 10 月 2 日

算法 中排名 1262

Download history 134/week @ 2024-04-07 138/week @ 2024-04-14 158/week @ 2024-04-21 111/week @ 2024-04-28 156/week @ 2024-05-05 163/week @ 2024-05-12 188/week @ 2024-05-19 160/week @ 2024-05-26 165/week @ 2024-06-02 83/week @ 2024-06-09 150/week @ 2024-06-16 174/week @ 2024-06-23 108/week @ 2024-06-30 83/week @ 2024-07-07 122/week @ 2024-07-14 132/week @ 2024-07-21

每月下载量 477
用于 10 仓库(6 个直接使用)

MIT 许可证

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