3

Javaプログラムを20回テストする必要があり、テストを繰り返すことができるようにランダムシードを設定する必要があります。最初のシードを0に設定し、実行ごとに1ずつインクリメントする場合(つまり、1、2、3など)、シードがそれほど離れていなくても、この方法で完全なランダム性が保証されますか?

ありがとうございました

4

4 に答える 4

6

どのシードも、Java に含まれているような標準PRNGの他のシードと同じレベルのランダム性を提供します。そのため、テストにインクリメント シードを使用しても問題ありません。

ただし、より優れた乱数ジェネレーターの使用を検討することをお勧めします。Java に含まれているものは、値を画像としてレンダリングすると、顕著な繰り返しパターンが生成されます (参考文献をすぐに見つけることはできませんが、明らかであることを思い出します)。Mersenne Twister (Javaバージョンがあります) を代替手段としてお勧めします。これは高速で、非常に長い周期を持つため、パターンを簡単に確認することはできません。

于 2011-04-27T04:04:52.120 に答える
2

0 のシードを使用すると、乱数のシーケンスはその時点から反復可能になります。別のシーケンスが必要な場合にのみ、別のランダム シードを使用する必要があります。つまり、テストごとに 1 回シードを設定できるはずです。

于 2011-04-27T07:04:15.277 に答える
1

現在の時刻をシードとして使用しないのはなぜですか? つまり、System.currentTimeMillis()?

于 2011-04-27T04:02:45.243 に答える
0

数値または文字列が必要ですか? UUID.randomUUID().toString()文字列が必要な場合はテスト用に UUID を取得していましたが、数値が必要な場合は System.nanoTime().

于 2011-04-27T04:03:25.830 に答える