重複しない0〜9の乱数列の取り出し方
今回はアルゴリズム系の話です。
最近あるサービスでランダムに◯件取得するみたいな機能を作成し、
そこで乱数について思うところが少しあったので、、
題名の通り重複しない0〜9の範囲の10個の乱数列の取り出し方について、
2通りの方法を試してみました。
- 乱数をどんどん発生させて、初めて出てきたものを取っていく
- 0〜9の配列を用意してシャッフルする
まず1のやり方を思いついたのですが、調べてみると2の方法も出てきたので、
実行速度を比較してみました。
乱数の範囲 | 方法1 | 方法2 |
---|---|---|
0〜9の10個 | 0.000319957733154 | 0.000150918960571 |
0〜99の100個 | 0.00186514854431 | 0.000289916992188 |
PHPを使って実験してみたんですが、
予想していたとおり、2番目の方法のほうが速度は速かったです。
特に取り出す乱数列の個数が大きくなるほどその傾向は顕著になるようです。