.NET框架中的Random对象以一个32位整数作为种子。这意味着任何使用Random对象的洗牌算法最多只能生成40亿种可能的洗牌方法(假设洗牌是根据随机序列确定的,我无法想象为什么不是这样)。这意味着一旦集合超过13个元素,就可以保证洗牌将不覆盖所有可能的排列方式。随着集合大小远离这个大小,洗牌所覆盖的可能排列子集变得越来越微不足道。
40亿是一个(主观上)很大的数字,但如果您正在生成一个集合的多个“随机”排列,则重复出现的几率比应该高得多(特别是当考虑到生日悖论/鸽笼原理时)。
有没有简单的方法可以解决这个问题,而不需要我实现自己的随机数生成器?
40亿是一个(主观上)很大的数字,但如果您正在生成一个集合的多个“随机”排列,则重复出现的几率比应该高得多(特别是当考虑到生日悖论/鸽笼原理时)。
有没有简单的方法可以解决这个问题,而不需要我实现自己的随机数生成器?