如果生成一个均匀随机排列
算法导论中介绍了两种简单的方法
1
Permute_by_sorting
n=A.length;
p[n]=new int;
for(int i=0;i<n;i++)
p[i]=random(1,n^3);
sort A,using p as sort keys
思路是创建一个优先级数组,然后依次伪随机出这个优先级的数字,最后按优先级将原数组排序
这样得到的是一个均匀的随机排列
sort A是最费时的步骤
2
Randomize_in_place
n=A.length
for(int i=0;i<n;i++)
swap(a[i],random(i,n));
思路类似A(N,K),从数组A中每次选择一个排列,(这里random是选择,swap是排列,从i到n的random可以保证进行剩下的排列)
方法的优点在于在原数组上进行操作,且耗时较少