在 MATLAB 中,我想生成n
range 中的随机整数对[1, m]
,其中每一对都是唯一的。为了唯一性,我认为这对中数字的顺序是不相关的,[3, 10]
因此等于[10, 3]
。此外,每一对应该由两个不同的整数组成;即[3, 4]
可以,但[3, 3]
会被拒绝。
编辑:应该以相同的可能性选择每个可能的对。
(显然,对参数的约束是n <= m(m-1)/2
。)
我已经能够在很小的时候成功地做到这m
一点,就像这样:
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
但是,矩阵A
的大小为m x m
,这意味着当m
变大(例如超过 10,000)时,MATLAB 会耗尽内存。
我考虑过生成大量随机数randi(m, [n, 2])
,并反复拒绝重复的行,但我担心在n
接近m(m-1)/2
.
有没有一种更简单、更简洁的方法来生成唯一的不同整数对?