1

我正在开发一个具有多种功能的项目。我多次调用一个伪随机数,每次调用不同的函数,然后对其进行一些数学运算。例如:

f(i,j)*random(i,j)

我假设在不同的函数中,伪随机数不等于给定 i 和 j 的另一个函数中的伪随机数。这是一个正确的假设吗?如果是这样,怎么可能改变呢?

如果重要的话,我使用的语言是 Xojo,它类似于 VB6。

4

2 回答 2

2

我不太确定问题是什么,但希望提供一些伪随机数生成器(PRNG)的基础知识会回答这个问题:

  • 这更多是一种语言特性,但通常调用相同的函数(即random)与您从哪里调用它无关(可能还有其他决定因素)。

  • random(i,j)可能会或可能不会连续两次或一段时间后返回相同的数字。这是(伪)随机的,我们只是不知道它是否会。

    如果您想random(i,j)始终返回相同的值,您可以考虑编写自己的函数,使用某个公式将i和的某个值映射到另一个值,或者您可以将所有先前生成的数字存储在 a中,如果存在则简单地返回该值。jmap

    如果您不想random(i,j)返回相同的值,请考虑从 to 生成数字并将i它们j打乱然后简单地重复返回列表中的下一个值。

  • 您通常可以设置 PRNG 的种子。这将导致,如果您在将种子设置为某个值后获得某个序列,如果您在其他时间将种子设置为相同的值,您将获得相同的序列。除了让您能够准确地重现以前的结果之外,这并没有真正起到太大的实际用途(我能想到的)。

于 2013-08-05T11:55:34.683 回答
0

如果您想random(i,j)在每次调用时都返回相同的随机数,i,j您可以简单地保存状态。

一种方法是将状态存储在n x n矩阵中R(其中n的范围是i,j)。在第一次调用random(i,j)set R(i,j) = rand()。在后续调用中检索现有值。

如果 的范围i,j非常大并且值稀疏,则使用哈希表R代替矩阵。

于 2013-08-05T00:42:08.690 回答