如何在javascript中获得在不获得重复值的情况下洗牌数组的概率
在javascript中,我有点困惑如何获得在数组中洗牌对象的实际和准确概率。 比如说如何在javascript中获得在不获得重复值的情况下洗牌数组的概率,javascript,arrays,probability,Javascript,Arrays,Probability,在javascript中,我有点困惑如何获得在数组中洗牌对象的实际和准确概率。 比如说 var numberOfOrder=[ { id:1 }, { id:2 }, { id:3 } ] 从上面的例子中,通过找到阶乘numberOfOrder.length,可以以6种方式操纵上述对象 但在数组中洗牌该对象的实际方式是什么 我的尝试 function newShuffle(value) { for(var i = value.len
var numberOfOrder=[
{
id:1
},
{
id:2
},
{
id:3
}
]
从上面的例子中,通过找到阶乘numberOfOrder.length,可以以6种方式操纵上述对象
但在数组中洗牌该对象的实际方式是什么
我的尝试
function newShuffle(value) {
for(var i = value.length-1;i >=0; i--){
var randomIndex = Math.floor(Math.random()*(i+1));
var itemAtIndex = value[randomIndex];
value[randomIndex] = value[i];
value[i] = itemAtIndex
}
return value
}
但是如果我运行该函数6次,返回重复的值,那么上面的函数将不会返回准确的值
正确的函数是什么?你必须理解概率和排列之间的区别。第二项来自组合学。有一些算法允许获得数组项的所有可能排列。以下是其中之一:
函数置换(项){
//单项数组-没有可用的排列
如果(items.length==1)返回[项目];
var组合=[];
对于(变量i=0;i 警报(排列([1,2,3])。连接(“\n”)代码>如注释和上述答案所述,您需要排列操作。然而,有许多方法可以获得数组的排列。关于排列的更多信息,我建议你们看看这个主题
另一方面,递归方法总是比动态编程方法慢得多。最近我提出了一种排列算法,它似乎是所有算法中最快的 你说“不会返回准确值”是什么意思?Math.random
函数和获取所有可能的数组项排列之间没有关系。那么,得到这样一个好答案的实际方法是什么呢?但是你能附上一些参考资料吗?函数的作用是什么?因为我是javascript新手