From e1f0a99425d7a3b9e04763dec6a6d8485e42e460 Mon Sep 17 00:00:00 2001 From: AmenLin <597863503@qq.com> Date: Thu, 5 Apr 2018 18:28:24 +0800 Subject: [PATCH] 1 --- PPT/JS-02-shuffle-L.html | 202 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 PPT/JS-02-shuffle-L.html diff --git a/PPT/JS-02-shuffle-L.html b/PPT/JS-02-shuffle-L.html new file mode 100644 index 00000000..46bccd7e --- /dev/null +++ b/PPT/JS-02-shuffle-L.html @@ -0,0 +1,202 @@ + + + + + + + 葡萄藤PPT + + + + + + + + + + + + + + + + + + + + + reveal.js + + + + + + + + + + +
+
+
+

洗牌算法具体指的是什么

+

深圳分院:林健凡

+
+
+

目录

+

1.背景介绍

+

2.知识剖析

+

3.常见问题

+

4.解决方案

+

5.编码实战

+

6.扩展思考

+

7.参考文献

+

8.更多讨论

+
+

一、背景介绍

+
+
+

什么是洗牌算法

+
+
+

+ 简单来说
+ 洗牌算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)
+ 这个算法生成的随机排列是等概率的 +

+
+
+

+ 再简单一点,就是将一个数组打乱 +

+
+
+

+ 伪随机(概率)
+ 真随机(几率) +

+
+
+

+ 所谓伪随机,是指概率事件,就是出现得并不规律,但是大致上就是这么多次数。比如1%,如果是每100次为一周期,那么1%意味着,尽管你不确定这1次究竟会什么时候出现,但100次中必然出现1次,不多一次也不会少一次。概率事件之间相互影响,一旦这一次没有触发,那么下一次触发的概率就会变大 +

+

+ 而真随机则是指几率。比如1%的几率,意味着你这次触发特殊事件是1%的可能性,下次也是,每一次都是。如果你这次失败,下次依然保持在1%的可能性。还是上面的例子,1%的几率,100次中可能出现100次,也可能1次都不会出现,几率事件不会互相影响,因为每一次都是一个独立的事件 +

+
+ +
+

二、知识剖析

+
+
+

Fisher–Yates shuffle 洗牌算法

+
+
+

+ Fisher–Yates shuffle 洗牌算法原始版 +

+
    +
  • 写下从 1 到 N 的数字
  • +
  • 取一个从 1 到 N 的数字的随机数 k
  • +
  • 从低位开始,得到第 k 个数字(这个数字还没有被取出),把它写在独立的一个列表的最后一位
  • +
  • 重复第 2 步,直到所有的数字都被取出
  • +
  • 第 3 步写出的这个序列,现在就是原始数字的随机排列
  • +
+
+
+

计算机会花很多无用的时间去计算上述第 3 步的剩余数字

+
+
+

+ Fisher–Yates shuffle 洗牌算法进化版 +

+
+
+

+ 在每次迭代时将随机选出的这个数字排到数组的最后 +

+
+
+

+ 时间复杂度是指执行算法所需要的计算工作量
+ 空间复杂度是指执行这个算法所需要的内存空间 +

+
+ +
+

三、常见问题

+
+

如何打乱数组排序

+

是否真的解决了完全随机

+
+

四、解决方案

+
+

Fisher–Yates Shuffle的JS实现

+
+

五、编码实战

+

六、拓展思考

+
+

怎么保证这个算法得到的数组是完全随机的(即等概)?

+
+
+

七、参考文献

+
+
+

参考一:洗牌算法怎样才够乱


+

参考二: 洗牌算法shuffle - caochao88


+

参考三: 当随机不够随机:一个在线扑克游戏的教训


+

参考四: 随机问题之--洗牌算法

+
+
+

八、更多讨论

+
+
+

还有没有更简单的洗牌算法

+
+
+

javascript sort()方法

+
+
+

鸣谢

+

感谢观看

+

BY ︱林健凡

+
+
+
+ + + + + +