2009-02-19 36 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

相关问题