in reply to Re: Check randomly generated numbers have not been used before (shuffle)
in thread Check randomly generated numbers have not been used before

> With a large number of elements, various optimizations may become appropriate

Actually shuffling 1..1e7 takes an eternity, but shuffling 1..1000 for 10000 times only takes seconds and is deterministic depending on the seed of srand .

So a second rand to chose one of these 10000 arrays and shift one element should be easy, fast, deterministic and produce quite good distributed results.

The mileage of the OP may vary. :)

BTW

The real complication of this whole approach of "try again another random number if already taken" idea, cause this will slow down considerably after a while if millions of random numbers need to be tried out.

Thats why shuffling is the far better approach.

Cheers Rolf

(addicted to the Perl Programming Language)

  • Comment on Re^2: Check randomly generated numbers have not been used before (2 dimensional shuffle)

Replies are listed 'Best First'.
Re^3: Check randomly generated numbers have not been used before (knowledge vs. expertise)
by BrowserUk (Patriarch) on Jun 22, 2014 at 09:24 UTC
    BTW

    The real complication of this whole approach of "try again another random number if already taken" idea, cause this will slow down considerably after a while if millions of random numbers need to be tried out.

    Here are the average times, per 1000 part numbers, for the first 9 millions from the 10 million range:

    [1000000]Ave: 0.003626 [2000000]Ave: 0.004084 [3000000]Ave: 0.004650 [4000000]Ave: 0.005443 [5000000]Ave: 0.006492 [6000000]Ave: 0.008238 [7000000]Ave: 0.010892 [8000000]Ave: 0.017433 [9000000]Ave: 0.300273

    So sure, allocating the 9th million takes roughly 100 times as long as the first.

    But that still means that unless the OPs company are going to need to allocate 1 million new part numbers in less than 5 minutes, the "slow down" isn't going to be any kind of a problem.

    And if they are going to allocate such ridiculously high numbers of new part numbers, that the allocation rate is a limiting factor; then they sure as heck need to be starting with a much larger range, otherwise they will run out in their first hour of trading.

    You've yet to learn the difference between knowledge and expertise.

    The knowledgeable are aware of theories, concepts and formulae.

    The experienced know when to apply them.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.