我需要一个快速的随机数发生器,它允许我随机访问随机数序列中不同位置的数字。我选择了Xorshift,因为它快速且易于实施。高效的Xorshift跳过
要获得从序列中的特定随机数,我实现下面的方法(mPos
保存的下一个随机数的位置):
void XorshiftRandomGenerator::skipTo(unsigned int pos)
{
// Reset if we passed the position
if (mPos>pos)
reset();
// Generate random numbers until we're done
while (mPos<pos)
random();
}
随后random()
将返回所希望的数量,但是这种方法是非常昂贵的。有没有办法用Xorshift跳过大量的随机数,而不计算它们之间的每个随机数?
作为另一种选择,我可以与另一个随机数发生器。你能建议一个允许快速跳过吗?
我认为一个线性同余发生器应该让你相当容易地跳过(即在对数时间)。 – Nabb 2012-07-29 14:45:36