我正在寻找一个带有两个输入并且总是返回相同输出的威慑性伪随机生成器。我正在寻找均匀分布,尽可能不可预测,并且不会重复很长时间的事情。理想情况下,该函数不依赖于先前的值。问题的原因是我正在为一个非常大的程序生成的世界生成地形数据,并且无法存储以前的值。
感谢任何帮助。
答案 0 :(得分:2)
我认为你正在寻找的是perlin noise - 它是一种在2d(通常)中生成“随机”值的方式,看起来像地形/云/等。
请注意,这与加密等没有多大关系,但是“真正的”随机数源可能不是您想要的合成地形(它看起来太嘈杂/ spikey)。
有一个good article on perlin noise here。
perlin噪声的实现确实使用随机数源,但通常您可以使用系统中存在的任何内容(如果您想稍后再现它,则从已知种子开始)。
答案 1 :(得分:0)
问题是决定使用PRNG算法还是接受2个输入的算法?
如果是前者,为什么不使用内置的随机类 - 例如.NET中的Random
类 - 因为它力求均匀分布和长循环。此外,给定相同的种子,它将生成相同的数字序列。
如果是后者,您可以做的是将2个输入映射到单个输出,并将其用作随机算法的种子。您可以定义一个简单的哈希函数,它接受一个字符串并从中计算一个整数:
s[0] + s[1]^1 + s[2]^2 + ... s[n]^n = seed
答案 2 :(得分:0)
对于PRNG,例如Mersenne Twister,两个输入的组合(通过将输入是二进制整数相互连接)组合成一个种子。