java - 生成三维随机数空间的算法

标签 java algorithm math random

我正在寻找一种算法来在大范围的三维(或更好的 n 维)空间中生成伪随机数。当使用种子初始化时,生成器应该能够为同一种子重复生成相同的数字。

但与编程语言中可用的大多数生成器不同,它不应该只返回序列中的下一个随机数,而是为特定坐标生成数字,无论以什么顺序请求值。

应该认为空间的大小太大,无法在初始化时生成所有数字。在 Java 中,它看起来像这样:

Random3D gen = new Random3D(seed);
int n1 = gen.getInt(3,0,6);
int n2 = gen.getInt(2,-3,1);
...

我该如何做这样的事情?

我通过使用 java.util.Random 编写一些代码在 Java 中进行了尝试,但结果的质量不是很好。

最佳答案

如果您希望针对相同的坐标始终收到相同的结果,那么当您指定种子时,您并不是在寻找真正的随机生成器。

您想要一种快速、可靠的算法?对于快速的,看看Mersenne twister .对于更强的,你可以看Blum Blum Shub .

您可以使用您的 n 维坐标和您的种子来生成伪随机数生成器。例如,您可以计算坐标 + 种子的 sha1 或 md5 或任何其他哈希值,并将其用于 PRNG。

编辑:对于一个简单的解决方案,math.random 可以接收 48 位的种子(小于 md5 输出),这对于您的问题来说可能有点小(您提到具有高维度,对吧?大坐标?)

关于java - 生成三维随机数空间的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6586042/

相关文章:

java - 无法使用 Eclipse Juno 编译 JSP 类

algorithm - if-else 逻辑简化

python - 我想用 python 解决的数学程序是什么?

java - 当我将字符串拆分为 2 个单词并交换它们时出现错误

java - 如何在 Java 中转义正则表达式的文本?

java - 通用决策树算法代码实现

algorithm - 计算数组中的所有索引对,使得 arr[i] < arr[j]

JavaScript 数学 — 得到错误答案 (128 - 64 = -64)?

iphone - 找到三角形的对角线?

java - Zebra 打印机塞尔维亚拉丁字符