Pseudo-random numbers in [0, n), covering all numbers in n steps?

Joseph Rushton Wakeling via Digitalmars-d digitalmars-d at puremagic.com
Fri Feb 26 00:34:20 PST 2016


On Friday, 26 February 2016 at 08:05:09 UTC, Joseph Rushton 
Wakeling wrote:
> On Thursday, 25 February 2016 at 17:27:25 UTC, Andrei 
> Alexandrescu wrote:
>> So we have 
>> https://dlang.org/phobos/std_random.html#.randomCover which 
>> needs to awkwardly allocate memory to keep track of the 
>> portions of the array already covered.
>
> Yes, this is definitely a standout in terms of being an 
> unpleasant solution.  It means that you require o(N) memory 
> even when you're dealing with a lazily-evaluated range -- it 
> would probably be more efficient in practice to just write the 
> input into an array and do an in-place shuffle. :-(
>
>> This could be fixed by devising a PRNG that takes a given 
>> period n and generates all numbers in [0, n) in exactly n 
>> steps.
>>
>> However, I've had difficulty finding such PRNGs. Most want the 
>> maximum period possible so they're not concerned with a given 
>> period. Any insights?
>
> I'll try to see what I can find.  This must be something that 
> other lazy/functional communities (Haskell, Clojure, ...) have 
> had to contend with.

A few potential lines of exploration here:
http://apfelmus.nfshost.com/articles/random-permutations.html
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.150.9347&rep=rep1&type=pdf


More information about the Digitalmars-d mailing list