の順列を生成したいのですが、などarray a
の効用関数を使用したくありませんjava.util.Collections()
。
順列はランダム化する必要があり、すべての順列が発生する可能性がありますが、均等に分散された確率は必要ありません。
次のコードはこれを実現しますが、パフォーマンスは低下します。
// array holding 1,...,n
// initialized somewhere else
int[] a = new int[N];
for (int i = 0; i < a.length ; i++) {
int r = (int) (Math.random() * (i+1));
swap(r,i,a);
}
private static void swap(int j, int k, int[] array){
int temp = array[k];
array[k] = array[j];
array[j] = temp;
}
質問:
順列の生成に使用される乱数の総数を減らす可能性はありますか?