数组洗牌 Fisher Yates
看播放器代码时发现的这个洗牌算法,再网上查了一番
作用是把数组变成随机序列,原理类似于从牌堆A中随机抽牌放进牌堆B
代码1: 返回一个由(数组下标)组成的数组
function random(length) {function shuffle (arr) {for (let i = arr.length - 1; i >= 0; i--) {const randomIndex = Math.floor(Math.random() * (i + 1));const itemAtIndex = arr[randomIndex];arr[randomIndex] = arr[i];arr[i] = itemAtIndex;}return arr;}return shuffle([...Array(length)].map(function (item, i) {return i;}));
}
代码2:
function shuffle(array) {var copy = [],n = array.length,i;// 如果还剩有元素则继续。。。while (n) {// 随机抽取一个元素i = Math.floor(Math.random() * array.length);// 如果这个元素之前没有被选中过。。if (i in array) {copy.push(array[i]);delete array[i];n--;}}return copy;
}
转载于:https://www.cnblogs.com/code-lzh/p/9890706.html
数组洗牌 Fisher Yates相关推荐
- 数组洗牌算法-shuffle
数组洗牌,最近直接的想法是从数组随机取出一个元素,放到另一个数组中,但是这样取出的元素会有重复,必须采取一定的方法保证: 1. 元素不能重复 2. 元素被抽取的概率相等,即随机性 数组洗牌经典算法有两 ...
- golang 切片 数组 洗牌
包 math/rand 中的 rand.Shuffle 函数使用给定的交换函数对输入序列进行混洗. a := []int{1, 2, 3, 4, 5, 6, 7, 8} rand.Seed(time. ...
- Java打乱牌的算法_Leetcode 384. 打乱数组 (洗牌算法)
从N个数中随机取一个数放在第一个位置 从剩下N-1个数中随机取一个数放在第二个位置. 依次放完每一个数. 可以证明每个位置每个数都是等可能出现的. 可以用数学证明,也可以用递归解释. class So ...
- JS 数组打乱 Fisher–Yates shuffle(费舍尔-耶茨 洗牌)
原理 : Fisher–Yates shuffle 洗牌算法是什么,为什么满足需求? 这里,我们简单借助图形来理解,非常简单直观.你接下来就会明白为什么这是理论上的完全乱序(图片来源于网络). 首先我 ...
- js打乱数组内元素顺序(Fisher–Yates shuffle洗牌算法)
如何将数组内元素顺序打乱呢?这里小shy向大家介绍一种算法. Fisher–Yates shuffle:洗牌算法. 通俗理解: 先将数组最后一位元素作为参考点,将这个参考点和数组其他位置的元素(使用随 ...
- leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)
题目 https://leetcode.com/problems/random-flip-matrix/ 题解 看了答案: 洗牌算法 Fisher–Yates shuffle Fisher–Yates ...
- 洗牌算法(Fisher–Yates Shuffle and Knuth-Durstenfeld Shuffle)
一.Fisher–Yates Shuffle 1.算法思想: 从原始数组中随机抽取一个新的数字到新数组. 2.算法描述: 初始化原始数组和新数组,原始数组长度为n(已知): 针对未处理的原始数组元素( ...
- c++随机打乱数组_【洗牌算法】你确定这样的抽奖算法是随机的?
洗牌算法在实际应用中使用的比较广泛,比如抽奖.三国杀游戏等等.由于要完全理解洗牌算法存在一定的难度,所以洗牌算法也经常被拿来做算法笔试题.例如以下两个常见的笔试题:在n个不同的数中随机取出不重复的m个 ...
- Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...
最新文章
- 荒岛野人[exgcd]
- 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx
- [数据库] Oracle单表查询总数及百分比和数据横向纵向连接
- Android学习 —— 多种适配器方式实现ListView
- 我的Go语言学习之旅一:WIN下Go的安装
- C语言试题六十二之请编写函数fun除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串第一个字母,形参p已指向字符串中最后一个字母。在编写程序时,不得使用c语言提供的字符串函数。
- Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer
- vue-cli使用swiper4在ie以及safari报错
- JavaScript,等比例缩放图片的函数,很好用。
- u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法
- (Docker实战) 第4篇:Centos7 拉取和部署Redis
- 我的天!我靠这个拥有了自己第一架无人机!
- JavaScript 与java中数组的区别
- 局域网制作ftp服务器,如何架设内网ftp服务器 搭建ftp yum源
- MySQL 的主从原理和复制过程简述
- C++编程入门系列之目录和总结
- 淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程
- 【计算机组成原理】码距怎么计算
- java scratch_scratch进阶java教程贴
- pytorch保存onnx模型