Generate random non-repeating integers from a small range

The kind of sequence you are looking for can be defined by generating differences from 1 to top - 1 and then computing the cumulative sum modulus top, starting from a random initial value:

function result = nonRepeatingRand(top, count)

    diff = randi(top - 1, 1, count);
    result = rem(cumsum(diff) + randi(1, 1, count) - 1, top) + 1;

end

On my machine, this generates a non-repeating sequence of 10 million numbers out of 1:5 in 0.58 seconds.


you can use the following code for generate Non Repeating Random Numbers from 1 to M

randperm(M);

and for K Non Repeating Random Numbers from 1 to M

randperm(M, K);

enjoy

Tags:

Matlab

Random