gpt4 book ai didi

random - 如何用种子确定性地洗牌数组?

转载 作者:行者123 更新时间:2023-11-29 07:57:27 27 4
gpt4 key购买 nike

我发现很难确定性地打乱数组,在 Rust 中使用随机种子。我想要实现的目标(伪代码):

let v = vec![0, 1, 2, 3];
pseudo_shuffle(v, randomSeed1) // always produces e.g. [3,1,2,0]
pseudo_shuffle(v, randomSeed2) // always produces e.g. [0,2,3,1]

In another Stack Overflow answer我学会了如何使用 rand::Rng::shuffle()不确定地打乱一个向量,但它似乎没有提供用于将随机种子应用于生成函数的 API,而且我自己也很难想出一个不使用一些荒谬的解决方案 n! 复杂度算法。

最佳答案

使用实现特征 SeedableRng 的随机数生成器并调用from_seed带有所需的种子。

例子:

use rand::{seq::SliceRandom, SeedableRng}; // 0.6.5
use rand_chacha::ChaChaRng; // 0.1.1

fn main() {
let seed = [0; 32];
let mut rng = ChaChaRng::from_seed(seed);

let mut v1 = vec![1, 2, 3, 4, 5];
v1.shuffle(&mut rng);
assert_eq!(v1, [3, 5, 2, 4, 1]);
}

在使用之前克隆 RNG 或使用相同的种子从头开始创建一个新的以重置回原始状态。

您可能还对 ReseedingRng 感兴趣

关于random - 如何用种子确定性地洗牌数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50119220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com