Wydajne generowanie unikalnych par liczb całkowitych

W MATLAB chciałbym wygenerowaćn pary losowych liczb całkowitych w zakresie[1, m], gdzie każda para jest wyjątkowa. Dla wyjątkowości uważam kolejność liczb w parze za nieistotną[3, 10] jest równe[10, 3]. Ponadto każda para powinna składać się z dwóch różnych liczb całkowitych; to znaczy[3, 4] jest ok, ale[3, 3] zostanie odrzucony.EDYTOWAĆ: Każda możliwa para powinna być wybrana z jednakowym prawdopodobieństwem.

(Oczywiście jest to ograniczenie parametrówn <= m(m-1)/2.)

Udało mi się to zrobić z powodzeniemm jest mały, tak:

m = 500; n = 10;                   % setting parameters

A = ((1:m)'*ones(1, m));           % each column has the numbers 1 -> m
idxs1 = squareform(tril(A', -1))'; 
idxs2 = squareform(tril(A, -1))';   
all_pairs = [idxs1, idxs2];        % this contains all possible pairs

idx_to_use = randperm( size(all_pairs, 1), n );  % choosing random n pairs
pairs = all_pairs(idx_to_use, :)       

pairs =

   254   414
   247   334
   111   146
   207   297
    45   390
   229   411
     9    16
    75   395
    12   338
    25   442

Jednak matrycaA ma rozmiarm x m, czyli kiedym staje się duży (np. ponad 10 000), w pamięci MATLAB zabraknie pamięci.

Rozważyłem generowanie obciążenia liczb losowychrandi(m, [n, 2])i wielokrotnie odrzucając wiersze, które się powtarzały, ale martwiłem się, że utknę w pętlin był bliskom(m-1)/2.

Czy istnieje łatwiejszy i czystszy sposób generowania unikalnych par różnych liczb całkowitych?

questionAnswers(3)

yourAnswerToTheQuestion