【发布时间】:2016-05-10 02:44:35
【问题描述】:
我正在寻找一种高效、均匀分布的 PRNG,它可以为平原中的任何整数点生成一个随机整数,并将坐标 x 和 y 作为函数的输入。
int rand(int x, int y)
每次输入相同的坐标时,它必须传递相同的随机数。
您知道可用于此类问题以及更高维度的算法吗?
我已经尝试使用像 LFSR 这样的普通 PRNG,并将 x,y 坐标合并在一起以将其用作种子值。像这样。
int seed = x << 16 | (y & 0xFFFF)
这种方法的明显问题是种子没有迭代多次,而是针对每个 x,y 点再次初始化。如果您将结果可视化,这会导致非常难看的非随机模式。
我已经知道使用某种大小(如 256)的随机排列表的方法,并且您可以像这样从中得到一个随机整数。
int r = P[x + P[y & 255] & 255];
但我不想使用这种方法,因为范围非常有限,周期长度有限,内存消耗很大。
感谢您提供任何有用的建议!
【问题讨论】:
-
代码是什么语言的?
-
我使用 C++,但问题与语言无关
-
你需要多大的整数?
-
x和y的最小值和最大值是多少? -
@Mark Ransom 整数大小无关紧要。我使用 32 位整数
标签: algorithm random hash dimension