对于给定的 n 个元素,生成的那个排列,每一个元素都能等概率地出现在每一个位置。
代码:for(int i = n - 1; i >= 0 ; i – )
swap(arr[i], arr[rand(0, i)]) // rand(0, i) 生成 [0, i] 之间的随机整数
因为每次选择后下次选择就可少一个随意可以构成分母分子相消的情况最后概率都为1/n
对于给定的 n 个元素,生成的那个排列,每一个元素都能等概率地出现在每一个位置。
代码:for(int i = n - 1; i >= 0 ; i – )
swap(arr[i], arr[rand(0, i)]) // rand(0, i) 生成 [0, i] 之间的随机整数
因为每次选择后下次选择就可少一个随意可以构成分母分子相消的情况最后概率都为1/n