2009-02-19 130 views
2

用256個隨機位生成一個數字的最佳方法是什麼?用256個隨機位生成數字的最佳方法是什麼?

串聯隨機字節的工作?


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

此外,使用這些數字的非重複對卡片進行排序是否合適?

+0

那種洗牌? – 2009-02-19 15:01:16

+0

@Joel - 是的,我指的是「加權」排序。 – user62572 2009-02-19 15:07:57

回答

0

是的,連接隨機字節將工作。

編輯:不知道爲什麼你需要256位來洗牌,你可以進一步擴大那部分?

+0

我不是數學家,但不會想要適合數字52!分成X位。 52!適合2^226的空間。字節對齊將是2^232。所以是的,我可以用232位來代替。再次,我只是舉一個例子來獲得一個想法和一些額外的信息。 – user62572 2009-02-19 15:05:51

3

洗牌的正確方法是使用Knuth Shuffle。它簡單而完美。假設使用良好的RNG,所有可能的卡片排序都是相同可能的完美含義。

-1

如果隨機字節發生器是好的,任何方法的效果都很好,並且您的卡片洗牌方法也是適當的。

5

是否可以連接隨機字節取決於您正在使用的隨機數生成器。一些隨機數發生器顯示序列相關性。對於這些隨機數生成器,連接會很糟糕。

如果您將這些隨機數字用於低壓圖形目的,您應該查看Blum Blum Shub。否則,看看Mersenne Twister

對於混洗有限集合,請看Fisher-Yates shuffle

相關問題