Fisher-Yates 洗牌算法代码如下:
const cpData = ['a', 'b', 'c', 'd']
for (var i = cpData.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = cpData[i];
cpData[i] = cpData[j];
cpData[j] = temp;
}
对于代码的解释
Math.random() * (i + 1)
是一个生成0到1之间的随机数乘以 (i + 1)
的表达式。
在 Fisher-Yates 洗牌算法中,这个表达式用于生成一个介于 0(包含)和 (i + 1)
(不包含)之间的随机数。其中 i
是当前迭代的索引值,它表示从数组的最后一个元素到当前迭代的元素的范围。
通过将 (i + 1)
作为乘数,我们可以确保生成的随机数逐渐减小,从而在算法中正确地选择要交换的元素位置。
需要注意的是,Math.random()
方法返回一个介于 0(包含)和 1(不包含)之间的伪随机小数。文章来源:https://www.toymoban.com/news/detail-490905.html
在 Fisher-Yates 洗牌算法的每个迭代中,我们使用 Math.random() * (i + 1)
生成一个随机数,并将其向下取整(Math.floor()
)得到一个介于 0 和 i
(包含)之间的随机整数。这个随机整数表示要与当前元素交换的位置。文章来源地址https://www.toymoban.com/news/detail-490905.html
到了这里,关于【算法】Fisher-Yates 洗牌算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!