3

私のプログラムでは、ランダムな整数の大きなシーケンスを多数生成する必要があります。

Random オブジェクトを使用してシーケンスを作成し、そのシーケンスをリストまたは配列に格納し、必要に応じて i 番目の要素を照会できることを知っていますが、シーケンスは非常に長くなる可能性があるため (1M 要素)、各シーケンスのシードのみを保存して、次のようなことができるかどうかを知りたい多くの異なるシーケンスがあります。

public static int getIthNumber(int seed, int i){
    Random r = new Random(seed);
    for (int j=0; j< i-1; ++j) r.nextInt();
    return r.nextInt();
}

しかし、ループのオーバーヘッドなし..

4

1 に答える 1

3

ランダムアクセスが必要な場合は、適切なシーケンスの使用を避けることができます。

public static int getIthNumber(int seed, int i){
    return new Random(seed * 10123457689L + i * 101111).nextInt();
}
于 2012-10-10T22:16:19.773 に答える