2

256個のランダムビットで数値を生成する最良の方法は何ですか?

ランダムバイトの連結は機能しますか?


byte[] data = new byte[32];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetNonZeroBytes(data); // should include zero bytes?
string number = BitConverter.ToString(data, 0).Replace("-", "");

さらに、これらの番号の重複しないものを使用してカードのデッキを並べ替えることは適切でしょうか?

4

4 に答える 4

5

乱数を連結できるかどうかは、使用している乱数ジェネレーターによって異なります。一部の乱数ジェネレーターは、シリアル相関を示します。これらの乱数ジェネレーターの場合、連結は適切ではありません。

これらの乱数を暗号化の目的で使用している場合は、BlumBlumShubを参照してください。それ以外の場合は、メルセンヌツイスターを見てください。

有限集合をシャッフルするには、Fisher-Yatesシャッフルを見てください。

于 2009-02-19T14:56:20.580 に答える
3

カードのデッキをシャッフルする正しい方法は、クヌース シャッフルを使用することです。シンプルで完璧です。適切な RNG を使用すると仮定すると、考えられるすべてのカードの順序が同じように発生する可能性が高いことを完全に意味します。

于 2009-02-19T14:51:04.350 に答える
0

はい、ランダムなバイトを連結するとうまくいきます。

編集: カードのデッキをシャッフルするのに 256 ビットが必要な理由がわかりません。その部分をさらに拡張できますか?

于 2009-02-19T14:49:53.510 に答える
-1

ランダム バイト ジェネレーターが優れていれば、どの方法でも同じように機能し、カード シャッフル アプローチも適切です。

于 2009-02-19T14:51:05.897 に答える