Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

is there a such thing as a randomly accessible pseudo-random number generator? (preferably open-source)

first off, is there a such thing as a random access random number generator, where you could not only sequentially generate random numbers as we're all used to, assuming rand100() always generates a value from 0-100:

for (int i=0;i<5;i++)
   print rand100()

output: 
14
75
36
22
67

but also randomly access any random value like:

rand100(0) would output 14 as long as you didn't change the seed

rand100(3) would always output 22

rand100(4) would always output 67

and so on...

I've actually found an open-source generator algorithm that does this, but you cannot change the seed. I know that pseudorandomness is a complex field; I wouldn't know how to alter it to add that functionality.

Is there a seedable random access random number generator, preferably open source? or is there a better term for this I can google for more information?

if not, part 2 of my question would be, is there any reliably random open source conventional seedable pseudorandom number generator so I could port it to multiple platforms/languages while retaining a consistent sequence of values for each platform for any given seed?

like image 957
nsfnotthrowingaway Avatar asked Jun 10 '10 23:06

nsfnotthrowingaway


2 Answers

I've not heard of anything like that, but it seems to me you could take use a decent hash and write a wrapper function that takes a seed value and your 'index', and runs them through the hash function. I'm not sure of the randomness of the bits output by various cryptographic hash functions, but I imagine that someone has taken a look at that.

like image 56
Michael Burr Avatar answered Sep 25 '22 07:09

Michael Burr


The PCG family of psuedo-random number generators can jump forward and backward in logarithmic time (i.e. jumping forward 1000 numbers requires O(log(1000)) operations), which is probably good enough to be considered random access. The reference C and C++ implementations both support this feature.

The table on the front page of the PCG site indicates that a number of other generators can support jump-ahead, but I've not seen it in any implementations.

like image 43
Evan Shaw Avatar answered Sep 25 '22 07:09

Evan Shaw