我需要一個快速的隨機數發生器,它允許我隨機訪問隨機數序列中不同位置的數字。我選擇了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