下記の重複が無い順列がn個あれば良いという事ですね。
- 同一の並び順
- 対極の並び順
> どのようにすれば上述のような対極の組み合わせの発生の回避又は発生した場合検知して削除できるでしょうか?
⇒「生成した乱数並び順と同一/対極の並び順がリストに無ければ追加する」様にすれば同じ事になります
n = 60; m = 5;
if n > factorial(m) / 2;
error('エラー:1~%dの乱数並び順は%d個以内', m, factorial(m) / 2)
end
OrderMat = zeros(n,m);
rng('shuffle');
r = 1;
while r <= n % n個揃うまでずっと続ける
rnd = randperm(m);
if ~ismember([rnd; fliplr(rnd)], OrderMat, 'rows')
OrderMat(r,:) = rnd; % リストに同一・対極の並び順が無ければ追加する
r = r + 1; % 追加したら個数を+1する
end
end
OrderCell = num2cell(OrderMat,2)