看播放器代码时发现的这个洗牌算法,再网上查了一番

作用是把数组变成随机序列,原理类似于从牌堆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相关推荐

  1. 数组洗牌算法-shuffle

    数组洗牌,最近直接的想法是从数组随机取出一个元素,放到另一个数组中,但是这样取出的元素会有重复,必须采取一定的方法保证: 1. 元素不能重复 2. 元素被抽取的概率相等,即随机性 数组洗牌经典算法有两 ...

  2. golang 切片 数组 洗牌

    包 math/rand 中的 rand.Shuffle 函数使用给定的交换函数对输入序列进行混洗. a := []int{1, 2, 3, 4, 5, 6, 7, 8} rand.Seed(time. ...

  3. Java打乱牌的算法_Leetcode 384. 打乱数组 (洗牌算法)

    从N个数中随机取一个数放在第一个位置 从剩下N-1个数中随机取一个数放在第二个位置. 依次放完每一个数. 可以证明每个位置每个数都是等可能出现的. 可以用数学证明,也可以用递归解释. class So ...

  4. JS 数组打乱 Fisher–Yates shuffle(费舍尔-耶茨 洗牌)

    原理 : Fisher–Yates shuffle 洗牌算法是什么,为什么满足需求? 这里,我们简单借助图形来理解,非常简单直观.你接下来就会明白为什么这是理论上的完全乱序(图片来源于网络). 首先我 ...

  5. js打乱数组内元素顺序(Fisher–Yates shuffle洗牌算法)

    如何将数组内元素顺序打乱呢?这里小shy向大家介绍一种算法. Fisher–Yates shuffle:洗牌算法. 通俗理解: 先将数组最后一位元素作为参考点,将这个参考点和数组其他位置的元素(使用随 ...

  6. leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)

    题目 https://leetcode.com/problems/random-flip-matrix/ 题解 看了答案: 洗牌算法 Fisher–Yates shuffle Fisher–Yates ...

  7. 洗牌算法(Fisher–Yates Shuffle and Knuth-Durstenfeld Shuffle)

    一.Fisher–Yates Shuffle 1.算法思想: 从原始数组中随机抽取一个新的数字到新数组. 2.算法描述: 初始化原始数组和新数组,原始数组长度为n(已知): 针对未处理的原始数组元素( ...

  8. c++随机打乱数组_【洗牌算法】你确定这样的抽奖算法是随机的?

    洗牌算法在实际应用中使用的比较广泛,比如抽奖.三国杀游戏等等.由于要完全理解洗牌算法存在一定的难度,所以洗牌算法也经常被拿来做算法笔试题.例如以下两个常见的笔试题:在n个不同的数中随机取出不重复的m个 ...

  9. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

最新文章

  1. 荒岛野人[exgcd]
  2. 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx
  3. [数据库] Oracle单表查询总数及百分比和数据横向纵向连接
  4. Android学习 —— 多种适配器方式实现ListView
  5. 我的Go语言学习之旅一:WIN下Go的安装
  6. C语言试题六十二之请编写函数fun除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串第一个字母,形参p已指向字符串中最后一个字母。在编写程序时,不得使用c语言提供的字符串函数。
  7. Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer
  8. vue-cli使用swiper4在ie以及safari报错
  9. JavaScript,等比例缩放图片的函数,很好用。
  10. u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法
  11. (Docker实战) 第4篇:Centos7 拉取和部署Redis
  12. 我的天!我靠这个拥有了自己第一架无人机!
  13. JavaScript 与java中数组的区别
  14. 局域网制作ftp服务器,如何架设内网ftp服务器 搭建ftp yum源
  15. MySQL 的主从原理和复制过程简述
  16. C++编程入门系列之目录和总结
  17. 淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程
  18. 【计算机组成原理】码距怎么计算
  19. java scratch_scratch进阶java教程贴
  20. pytorch保存onnx模型

热门文章

  1. CMake生成Opencv在vs 2013的解决方案(出错1)
  2. 在.net中加载dll的一种错误问题原因及处理
  3. 快播王欣明天就出狱了,他能借钱东山再起吗?
  4. 重磅!四部委发文,以后买房可以省几十万元!
  5. 这些人,建议你不要去贷款了
  6. 电影《麦田》的外景地其实是呼伦贝尔
  7. 输入序列不连续的序列检测
  8. 模拟集成电路的经典教材
  9. 水晶报表10高级开发版下载及序列号
  10. CMFCTabCtrl 切换页面闪烁问题