function r = bingo(n,k)
% r = bingo(n) retruns a random permutation of 1:n.
% r = bingo(n,k) returns a k-by-n array, each row of which is a random
% permutation of 1:n.
% (ja.doukaku.org Q46)
if nargin<2
k = 1;
end
[s r] = meshgrid(1:k,1:n);
% q = zeros(k,2);
for p = n:-1:2
q(:,1) = ceil(rand(k,1)*p);
q(:,2) = p;
q = q+s(1:2,:)'*n-n;
r(q) = r(q(:,[2 1]));
end
r = r';
shg #2297() [ Matlab ] Rating1/1=1.00
最初の投稿でえらそうに別解です、なんて書いたけどMATLABのrandpermは実は.mファイル(つまりMATLABで書かれたスクリプト)でその中身は投稿したコードと全く同じだということに気付いた。情けないのであらためて別解。前と同様第二引数で何個生成するか指定する。sortを使う方法よりずいぶん遅い。次のようにすると計算時間の測定と順序が均等かどうかのおおまかな確認ができる。
function r = bingo(n,k) % r = bingo(n) retruns a random permutation of 1:n. % r = bingo(n,k) returns a k-by-n array, each row of which is a random % permutation of 1:n. % (ja.doukaku.org Q46) if nargin<2 k = 1; end [s r] = meshgrid(1:k,1:n); % q = zeros(k,2); for p = n:-1:2 q(:,1) = ceil(rand(k,1)*p); q(:,2) = p; q = q+s(1:2,:)'*n-n; r(q) = r(q(:,[2 1])); end r = r';Rating1/1=1.00-0+