鱼C论坛

 找回密码
 立即注册
查看: 4056|回复: 17

[吹水] 0062 - 随机中的必然 |【简单几行代码看透误以为】

[复制链接]
发表于 2018-8-21 16:47:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2019-8-23 14:29 编辑

1.gif


最近看闲书,遇到了一个抛硬币实验很有意思,拿程序简单模拟了一下。

这么简单的事物,我们却存在偏见。

我们可怜的大脑,被误以为太厉害了,最近完结的思维(意识)的#七宗罪有兴趣的鱼油可以去了解下~

好了,言归正传,这个实验是这样的:
有一个统计学教授,在第一堂课上,给学生布置了个作业。

要求大家做一件特别乏味的工作,拿出一枚硬币,连扔200次,然后记下结果,正面还是反面,仔细记录。

教授提醒说:“你们可别造假,造假我可看得出来。”


学生们以为教授只是在吓唬人,没当回事。

对啊,什么叫连续扔硬币,不就是搞一个随机数嘛。

随机数就是没有规律的数啊,我们就编一个没有规律的结果不就行了吗?

这是人之常情嘛,所以手动胡乱写200个很方便有木有。。。

果然有学生偷懒,没有老老实实地去掷200次硬币,而是编了个记录表交差了。

奇怪的是,教授果然一眼就能识别出哪些学生偷懒了,没有真的扔硬币。

那教授怎么发现的?




魔鬼在细节

12.gif


很简单,如果是我们偷懒怎么搞?

胡编一个记录,只要正反都有就得了~

就像这样:
正反正反反正反反..


如果只是胡乱的看看,那确实没问题,但是作为逻辑性思维很强的统计学教授一看就知道大有问题!

教授之所以一眼看出来是假的,就是因为这个记录表编造得太“随机”了。

造假者认为,只有这样才符合掷硬币这种“随机现象”的特征。

他们会极力避免连续出现多次同样的结果

让我们暂停一下,鱼油刚才是不是也是这么认为的呢?




揭开真相

1.gif


他们认为,那样“太不随机”了。

实际上,如果你真去老老实实地掷200次硬币,而记录下来,就会发现:
正面或者反面连续出现六七次的现象会很多。


真正的结果会像这样:
正反反反反反正正反反正正正正正正正。


其实,懂概率的人稍稍计算一下,就能解释这个现象。

你扔10次硬币,结果都是正面的概率很小,只有1/1024(1/(210)),是极小可能性,可当掷的次数足够多的时候,情况就不一样了。

公式:

  1. f(n<k) =0
  2. f(k) = 1/(2^k)
  3. f(n+1)= f(n) + [1-f(n-k)]/[2^(k+1)], n>k
复制代码

有兴趣的鱼油可以写一个递归脚本算一算。

如果掷上700次,那连续10个正面出现一次的概率就达到约29%。

如果掷上5000次呢?

连续10个正面出现的概率达到了91.37%;

如果掷上1万次,概率为99.99%,这时,几乎可以确定,一定会出现连续10个正面。

那么回到最初的问题,200次,连续出现5,6次同样的状况,概率是多少呢?

还有一种比较好理解的反证法

连续抛硬币6次,6次都出现同面的概率为1/2的5次方,等于3.125%。

所以,一次尝试抛不出连续6个同面的概率是1-3.125%=96.875%

第一次没有抛出6个同面,硬币已经抛过了6次,我们还有194次机会尝试。

所以,可以得出连续抛硬币200次,相当于195次尝试抛出6个同面的机会,那么抛不出6个同面的概率就是96.875%的195次方,等于0.002 05。

用1减去0.002 05就是抛200次硬币,出现连续6个同面的概率:0.998约等于99.8%

这意味着什么?

意味着:
基本上一定会出现连续6次


鱼油不信是吧,来一段简单的JS代码,验证一下:
  1. //    模拟200次
  2.     for(var i = 1 ; i < 201 ;i++)
  3.     {
  4.         coinToss();
  5.         if((i % 20) == 0)
  6.         {
  7.             document.write("<br><br>");
  8.         }
  9.     }
  10.     function coinToss() {
  11. //        随机数产生正反
  12.         var result = Math.floor(Math.random() * 2);
  13.         if(result == 0)
  14.         {
  15.             result = '正面';
  16.         }
  17.         else{
  18.             result = '反面';
  19.         }

  20.         document.write(result+" ");
  21.     }
复制代码

Snip20180821_46.png


看到了不?!

随便一次,结果中就有连续相同的结果,5-7次。

源码(回复“我爱鱼C”):
游客,如果您要查看本帖隐藏内容请回复


所以,教授布置的作业很狡猾,他是让你掷硬币200次,其中一定会出现连续5-7次相同的情况

如果看不到这种情况,看到的只要是更乱、更随机的记录结果,不用问啊,那就是学生偷懒造的假啊。




吹水

31929b22a23a36dd0fa91022a936102b.jpg


苏格拉底说过很多名言,其中这一句很适合今天的帖子:
未经审视的人生不值得度过


对于我们现在身处的时代,混乱无序中追求一种平衡,不管什么时代打麻将,可能都会发生:
一会儿手气特好,一会儿手气特差,好像麻将后面有鬼。就是打牌的时候,好像牌后面有人操纵。


这就是这个随机世界中的必然结果,当然等发生了再回看的必然,也没有多大意义。

但是,作为程序员我们可以这个鬼揪出来

简单的一计算概率,大体赢面输面自然知晓。

而不是通过通过各种仪式,比如摸牌的姿势来讨好这个鬼。

所以麻将桌上也是特别容易诞生迷信的地方。

迷信科学其实都是在找规律,只不过,科学讲究方法和证据,而迷信是一通胡来。

迷信的反义词是什么呢?

从上面来看那就不是科学了,是啥呢?

是承认不确定性,是承认随机性,承认有些东西不可解释,不可预测,并且欣然接纳它带来的结果。

所以,为什么程序员的认知能力都不错呢,因为能靠代码养活自己已经具备了如下两个条件:
第一要有逻辑思维能力。
第二会用代码验证随机性。


所以用代码思考自己的人生,还是很有意思的不是吗?!

之前在隔壁 JS 系列也写过一个双色球的代码,有兴趣的鱼油自行围观。(传送门




预知更多神文请看:


如果喜欢,别忘了评分


                               
登录/注册后可看大图


如此多懂学习的VIP至尊已订阅本专辑,你还不快点行动!(&#9758;订阅传送门 )

评分

参与人数 3荣誉 +11 鱼币 +11 贡献 +12 收起 理由
LuckyTiger66 + 5 + 5 + 3
睦ちゃん她爹 + 3 鱼C有你更精彩^_^
小甲鱼 + 6 + 6 + 6 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-21 17:16:33 | 显示全部楼层
如果我是那个教授的学生,我可能也会像那样避免写出重复几次的结果,就像自己编一个随机数字一样,比如52036974180,总感觉有两个连续数字就好像不是随机的。
写了个验证抛200次硬币的python代码试了一下:
  1. import random
  2. for i in range(200):
  3.         if i%20 == 0:
  4.                 print('\n')
  5.         temp = random.randint(0,1)
  6.         if temp:
  7.                 print('正',end='')
  8.         else:
  9.                 print('反',end='')
复制代码
  1. 反反反正正反反正反正反正反反反反正反正正

  2. 正反正正反正反反反反反反正反反反反正正反

  3. 正正正正正反正反反正反正反正反反正正正反

  4. 反正反反反反正正反反正正正反正正正反反反

  5. 正正反反正反反反反反正正反反反正正反正正

  6. 正正正反正反正反反正正正反反反正反正反正

  7. 正反反反正反正正反反正正正正反反正反正正

  8. 正正反正反反反反反反正正正正正反正正正反

  9. 正正正反反正反正反正反反正正正正反反正反

  10. 正反反反正反正正反正正反正反正反反正反反
复制代码

竟然有这么多次连续重复的!
学到了,学到了!

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2018-8-21 17:18

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
不二如是 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-21 16:50:15 | 显示全部楼层
菊、套与吹水,每天涨姿势~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-22 12:51:39 | 显示全部楼层
根据概率学公式,投硬币的次数越多概率越接近百分之50,一开始投的时候可能是连续出正面或是反面都很正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-22 15:13:40 | 显示全部楼层
这里机器产生的随机数是伪随机数,据说真正能产生接近于真实随机数的芯片和算法不会用于民用的,很昂贵的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-9-8 11:18:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-13 10:32:03 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-19 11:22:34 | 显示全部楼层
希望不二大佬能讲讲js加密
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-29 16:43:05 | 显示全部楼层
谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 21:48:29 | 显示全部楼层
我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-18 17:56:24 | 显示全部楼层
随机中果然存在必然
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-26 11:08:01 | 显示全部楼层
这个是怎么算的。。。。(710/1024 = 50%)


求解。。。

数学渣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-25 13:50:03 | 显示全部楼层
有本事你发个随机算法(任意语言)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 19:24:23 | 显示全部楼层
叫兽就是叫兽啊,老油条了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-10 03:12:37 | 显示全部楼层
我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-10 16:30:51 | 显示全部楼层
我爱鱼c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 02:40:33 | 显示全部楼层
我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 19:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表