洗牌算法是一个极大依托于随机数的算法。
获得随机数在计算机中是一个很复杂的事情,因为计算机是电子化的产品,所有的内容都是通过代码生成的。而代码生成的随机数,理论上是可以被预测的。这是事实,所以计算机中有一部分随机数是伪随机数。而伪随机数的可预测性对于赌场,安全性机构,密码等应用上的风险是很明显的。因此,计算机还会通过检测电脑外部不可预知的物理现象得到随机数的生成依据。这个得到的就是真随机数。
在平时的程序中,一个伪随机数就够了,随机数生成的依据是时间种子。
洗牌算法的目的是随机的将一个序列的内容打散,所以计算方法有很多。
方法1:
将n个数字排成一列,循环n次,第i(0<i<n+1)次在(0~i-1)这i个数中随机选择一个数,将这个数与第i个数互换位置即可。
c++代码如下:
shuffling.h