大家好,我是IT修真院北京分院第27期学员,一枚正直善良的前端程序员今天跟大家分享一下洗牌算法的使用。
今天讲下深度思考中的知识点
————洗牌算法具体指的是什么?
1.背景介绍
洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常会碰到,本质是让一个数组内的元素随机排列。
类似于洗牌,将所有牌的位置打乱,让他们随机出现在任何位置。
2.知识剖析
2.1洗牌算法有哪些原理方法
方法一:
从牌堆里随便抽一张出来,然后放在一边,之后从剩下的牌里重复之前的操作,直到所有牌都被抽出来放到了另一堆中。抽象到代码世界,按相同的做法,就是随机从数组里取出一个元素,保存到另一个数组,然后重复之,直到原数组中所有元素都处理掉。
方法二:
随机从数组中抽出一个元素,然后与最后个元素交换,相当于把这个随机抽取的元素放到了数组最后面去,表示它已经是被随机过了,同时被换走的那个元素跑到前面去了,会在后续的重复操作中被随机掉。一轮操作过后,下一轮我们只在剩下的n-1个元素也就是数组的前n-1个元素中进行相同的操作,直到进行到第一个。
3.常见问题
洗牌算法是否真的实现了完全随机?
4.解决方案
5.扩展思考
还有什么比较实用的乱序方法?
6.参考文献
参考一:洗牌算法:给数组随机排序
参考二:由乱序播放说开了去
参考四:随机问题之--洗牌算法
7.更多讨论
sort()方法只能在原数组上排序,不是很方便。
计算机的random方法都是伪随机,一般都需要一个种子seed作为基准。一般都是默认拿当前时间戳作为种子,进行随机算法;
www.cnblogs.com/greatfish/p/5845924.html
这篇文章可以做一个完整的解释;
www.h5jun.com/post/array-shuffle.html
segmentfault.com/a/1190000005875191
这些都是一些常见的洗牌算法;
随机数组决定定时器开始和结束;
这个也是通过Math.floor(Math.random() * array.length)这个知识点随机而来;
经过我俩的讨论:
个人拙见,多多指教
感谢阅读
github-PPT链接
ptteng.github.io/PPT/PPT/js-02-what-is-shuffle.html#/
腾讯视频链接
v.qq.com/x/page/l0514dtsels.html
-----------------------------------------------------------------------------------------------------------------------------------
人生苦短,想学Python。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。