关于向量置乱算法与rand()的一种实现之间的问题,请看图

图片说明图片说明图片说明
我不懂的是答案讲的是什么意思,为什么rand()这种实现获得的随机数要跟阶乘扯上关系,rand生成的不是一个一个的随机数字吗,为什么是一串随机数字呢?这样生成一串随机数字跟向量置乱有什么关系啊?为什么这种实现不能用于置乱算法?

rand每次生成一个伪随机数,它会同时产生一个新的种子(你的代码中的next)。
如果给定一个种子,那么产生的随机数和下一个种子是确定的。
使用相同的种子和确定的伪随机数算法,那么它产生的随机数和下一个种子是确定的。因此下一个随机数和下下个随机数的种子也是确定的,……
也就是说,用一个种子连续生成随机数n次,得到的随机数可以组成一个序列(一串随机数字)。
之所以要考虑“向量置乱”,是因为,我们有很多算法需要借助随机数去模拟(比如洗牌算法、随机排列组合),当然,在真正的随机数算法中这没有什么问题。
问题是我们用的是伪随机数算法,伪随机数算法产生的随机数并非是真正的随机数,这就会导致用它作为模拟的基础的算法可能出现误差。
这文章就是分析这个的。