なたで日記

いろいろな思ったこと書きますヽ(^▽^ゞ)

ランダムな添え字

time 2010/11/30

ランダムな添え字

こんな感じで。

Java

	/**
	 * 指定した長さの一様分布な重複しないランダムな添え字を作成します。
	 * @param length
	 * @param seed
	 * @return
	 */
	public static int[] getRandomIndex(int length, long seed) {
		Random random = new Random(seed);
		int[] buffer = new int[length];
		for (int i = 0; i < length; i++) {
			buffer[i] = i;
		}
		int[] out = new int[length];
		int n, rest;
		for (int i = 0; i < length; i++) {
			rest = length – i;
			n = (random.nextInt() & 0x7FFFFFFF) % rest;
			out[i] = buffer[n];
			if (1 != rest – n) {
				for (int j = 1; j < rest – n; j++) {
					buffer[n + j - 1] = buffer[n + j];
				}
			}
		}
		return (out);
	}

MATLAB

function [ out ] = getRandomIndex( length, seed )
%[ out ] = getRandomIndex( length, seed )
%指定した長さの一様分布な重複しないランダムな添え字を作成します。

if nargin==2
	s = RandStream.create('mt19937ar','seed',seed);
	RandStream.setDefaultStream(s);
end

data = 1:1:length;
out  = zeros(1,length);
rest = length;

%重複しないランダムな値を作成
for j=1:length
	n = 1 + fix(rest * rand(1,1));
	out(j) = data(n);
	if 0~=rest-n
		for k=1:rest-n
			data(n+k-1) = data(n+k);
		end
	end
	rest = rest – 1;
end




プロフィール

なたで

なたで

明るくて楽しいことが好きです!モノづくりや旅が趣味です!

RSS フィード RSS feed GitHub GitHub Twitter Twitter YouTube YouTube



sponsored link

タイムライン