Most efficient way of randomly choosing a set of distinct integers

I'm looking for the most efficient algorithm to randomly choose a set of n distinct integers, where all the integers are in some range [0..maxValue].

Constraints:

  • maxValue is larger than n, and possibly much larger
  • I don't care if the output list is sorted or not
  • all integers must be chosen with equal probability

My initial idea was to construct a list of the integers [0..maxValue] then extract n elements at random without replacement. But that seems quite inefficient, especially if maxValue is large.

Any better solutions?

9
задан Martijn Pieters 31 July 2013 в 21:43
поделиться