ランダムな添え字

投稿日: 更新日:

こんな感じで。

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
広告

コメントをどうぞ(承認された後に公開されます。メールアドレスの記入は自由ですが、記入した場合でも一般公開されることはありません)

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中