github链接
我们在使用sort方法配合Math.random()方法对数据进行随机排序的时候,每一种出现的结果并不是等可能的,每种情况出现的概率实际上与原数据顺序有关。
var str = 'abcd';
var arr = str.split('');
arr.sort(function(){
return Math.random() - .5;
});
下图是用上面链接中的文件对字符串‘abcd’进行上述方法排序10000次的运行结果。
可以看出,每种情况出现的概率并不相等。实际上,其概率可以通过理论计算推导出来。
对于情况1——abcd,sort排序首先a,b随机调换位置,一半的概率不调换;
在这种情况下,sort方法会继续比较b、c,也是一半的概率不调换;
接着sort方法会比较c,d,仍然是一半的概率不调换;
因此出现'abcd'的概率为(1/2)^3即12.5%,与实际频率12.39%接近,毕竟实际结果存在一定的偶然性,偏差在可接受范围。
实际上,假设每种情况sort比较次数为n,那么这种情况出现的概率为(1/2)^n。