gpt4 book ai didi

algorithm - 寻找可重放/有点无状态的 PRNG 算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:11 27 4
gpt4 key购买 nike

我正在寻找一个“可重放”和“无状态”的伪随机数生成器。让我详细说明一下:我需要能够根据随机函数的参数重新获取伪随机数。例如(C 风格的伪代码):

int x1 = random(1);
int x2 = random(2);
// and so on with lots of random() calls in between
int new_x1 = random(1);
// now new_x1 is like a "replay" of x1, so x1 == new_x1

参数的类型无关紧要(我可以根据需要进行类型转换),返回值不必是int;最终我需要 8 位值。

问题是:什么是好的 PRNG 算法可以满足下一个伪随机值由参数控制的要求,而不是由每次调用时更新的内部状态控制?我不知道如何使用像下面这样的糟糕解决方案:

int random(int input) {
srand(input);
return rand();
}

这将不得不在每次调用时初始化 PRNG,这看起来代价高昂。 (我使用标准的 srand()/rand() 来说明这一点,我知道那里有更好的算法,比如 Mersenne Twister,但想法仍然相同。)

最佳答案

一种可能适用于此的方法是使用分组密码,如 AES 或三重 DES。你的伪随机生成器可以是

int pseudorandomValue(int input) {
return encryptUsingAES(input);
}

这是无状态的、伪随机的(因为 AES 的输出在统计上应该与随机无法区分),而且是无状态的。

希望这对您有所帮助!

关于algorithm - 寻找可重放/有点无状态的 PRNG 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28907136/

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