美文网首页IT修真院-前端
洗牌算法具体指的是什么

洗牌算法具体指的是什么

作者: slashnie | 来源:发表于2017-10-25 22:10 被阅读18次

今天给大家分享一下:洗牌算法具体指的是什么。

一、背景介绍

洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常会碰到,本质是让一个数组内的元素随机排列。类似于洗牌,将所有牌的位置打乱,让他们随机出现在任何位置。

二、知识剖析

洗牌算法的原理是什么?

方法一:

从牌堆里随便抽一张出来,然后放在一边,之后从剩下的牌里重复之前的操作,直到所有牌都被抽出来放到了另一堆中。抽象到代码世界,按相同的做法,就是随机从数组里取出一个元素,保存到另一个数组,然后重复之,直到原数组中所有元素都处理掉。

demo1

demo1   shuffle  方法代码

我们创建了一个copy数组,然后遍历目标数组,将其元素复制到copy数组里,同时将该元素从目标数组中删除,这样下次遍历的时候就可以跳过这个序号。

方法二:

随机从数组中抽出一个元素,然后与最后个元素交换,相当于把这个随机抽取的元素放到了数组最后面去,表示它已经是被随机过了,同时被换走的那个元素跑到前面去了,会在后续的重复操作中被随机掉。一轮操作过后,下一轮我们只在剩下的n-1个元素也就是数组的前n-1个元素中进行相同的操作,直到进行到第一个。

demo2

demo2   shuffle代码

shuffle函数挂载在Array对象的原型之下,便于数组直接调用该函数。在shuffle函数内部,this引用的就是调用该shuffle的数组。用一个新的变量引用this,也就是调用shuffle函数的数组。接下来的for循环用于遍历所有数组内的所有元素,并进行随机交换。注意,遍历顺序是从后往前进行的,也就是说从input.length-1位置的元素开始,知道遍历到数组中的第一个元素。遍历过程中的位置由变量i指定。接下来,使用了两行代码在指定范围内挑选一个随机元素。 变量randomIndex存储了一个随机数,该随机数可以用作数组的索引,进而提取一个随机元素。注意,该随机数的最大值并不是数组的长度,而是变量i的值。确定了随机元素的索引之后,用新的变量保存该元素的值,然后交换选中元素和随机元素的值。

三、常见问题

洗牌算法是否真的实现了完全随机?

四、解决方案

验证代码块

五、编码实战

六、拓展思考

1 、还有什么比较实用的乱序方法?

       利用sort函数 :        arr.sort(function(){ return 0.5-Math.random()});

一行代码就可以实现,相对而言比较简单,但是他并不能实现真正意义的随机。

参考一:www.w3cplus.com/javascript/shuffling-array-js.html       

参考二:http://www.cnblogs.com/Wayou/p/fisher_yates_shuffle.html

参考三:http://blog.jobbole.com/64897/

参考四:http://www.cnblogs.com/jkisjk/archive/2012/04/23/javascript_shuffle.html

1 各种洗牌算法的效率比较:比较代码执行链接

鸣谢

感谢观看

BY聂义中

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 洗牌算法具体指的是什么?

    大家好,我是IT修真院郑州分院第七期的学员冯亚超,一枚正直纯洁善良的WEB程序员 今天给大家分享一下,洗牌算法具体...

  • 洗牌算法具体指的是什么?

    大家好,我是IT修真院深圳分院第02期学员,一枚正直善良的web程序员。 今天给大家分享一下,修真院官网JS任务0...

  • 洗牌算法具体指的是什么?

    大家好,我是IT修真院武汉分院第11期的学员,一枚正直纯洁善良的前端程序员,今天给大家分享一下,修真院官网js任务...

  • 洗牌算法具体指的是什么

    今天给大家分享一下:洗牌算法具体指的是什么。 一、背景介绍 洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常...

  • 洗牌算法具体指的是什么

    1.背景介绍 洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常会碰到,本质是让一个数组内的元素随机排列。 类...

  • 【Js-002】洗牌算法具体指的是什么?

    大家好,我是IT修真院北京分院第27期学员,一枚正直善良的前端程序员今天跟大家分享一下洗牌算法的使用。 今天讲下深...

  • Golang洗牌算法,抢红包算法

    本文为转载,原文:Golang洗牌算法,抢红包算法 1. 洗牌算法 洗牌算法,即将原来的顺序打乱,组成新的随机排序...

  • 洗牌算法

    一次偶然的机会,需要我生成一个长度为len的数组。数组的内容是[0-len)。这并不难,分分钟生成这样一个数组: ...

  • 洗牌算法

    在工作中需要重写一个洗牌算法,根据网络中的资料分析了一下,已经有总结得很好的了,就直接总结转载了一下。 洗牌算法大...

  • 洗牌算法

    洗牌算法是一个比较形象的术语,本质上让一个数组内的元素随机排列。

网友评论

    本文标题:洗牌算法具体指的是什么

    本文链接:https://www.haomeiwen.com/subject/kgzryxtx.html