主题:【讨论】【跟进】趣味数学题 (三) -- 数值分析
这个帖子是 我 数值分析:【讨论】【跟进】趣味数学题 (二) 的跟进.
这人气真是个奇妙的东西,我自己发的故事自己讨论,热度和 @任爱杰 老兄的转载帖子完全没得比,可以说应者寥寥啊. 不过在不多的回复中,
@审度 审度:题不达意呗 和 @孟词宗
孟词宗:原题本身表述不清吧 两位同学 指责我原来的题目表述不严谨,是误导观众.
这里先澄清一下.原始的故事并不是我发在西西河里的,而是发在另一个地方.并且在首发的时候也不是作为一个帖子,而是一篇日志.日志么,主要是记录自己生活中的有趣的想法,本意并不在严肃讨论,而是开玩笑性质更多. @ 孟词宗 老兄 也在那里,应该知道我在首发的时候也明确说了,这篇故事的目的不过是 "碰瓷,骗点点击"
蒙 @任爱杰 同学不弃,将我那篇转到了河里,才引起了很多严肃的讨论. 这在上一篇里我已经感谢过了.
既然大家这么有兴致,不妨我把这个故事改写得严密一些,因为老铁不允许修改原帖,我把新的版本写在这里如下:
-----------------------------------------
今天听到一个例子,很适合说明怎么叫概率推断,或者概率推断会有多反直观.
比如新来了一家邻居,我知道该邻居家有两个孩子,但不知道任何关于这两个孩子的其他情况.
有一天我出门正看见新邻居正拿着全套的星战行头回家,突然意识到今天是5月4日,于是上前和邻居打招呼到:"May the force be with you!".邻居认出我来,显得颇有些尴尬,赶忙解释道"不不,这不是我的,是我给我儿子买的,他是个星战迷."
我心里默默推算,嗯,原来邻居有个儿子,那么邻居家另一个孩子也是男孩的概率为三分之一(对,这不是笔误,三分之一,不是二分之一).
本帖一共被 1 帖 引用 (帖内工具实现)
你有两个钢蹦儿,扔了一个出来,为正面;另一个扔出以后,仍然为正面的概率是多少?1/2还是1/3?
等效应该是这样的:
你一次扔了两个钢蹦儿,用两个纸杯盖住结果,打开第一个纸杯,发现是正面,然后问河友,第二个钢镚是正面的概率是多少?
注意,我问的不是为什么像你说的那样,是为什么不像我说的那样,你能回答么?
也许再争下去也没意义,不如用计算机模拟一下,我就写了个程序来模拟结果是1/2,把代码贴出来请你指正,最好也让我看一下你自己写的,如果你名副其实,应该不难吧。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a; int b1=0; int b2=0; int i=0; srand((unsigned)time(NULL)); for(i=0;i<10000;i++) { a = rand(); if((a&6)==6)//see older boy { b1++; if((a&1)==1)b2++; } else if((a&5)==1)//see younger boy { b1++; if((a&2)==2)b2++; } } printf("%d\t%d\t%f\n", b2,b1,(float)b2/(float)b1); return 0; }
其实我想的是那家人孩子男女分布、大小分布的问题,表述出来是那家人另一个孩子是男是女问题。
懒厨河友表述的是你所想的问题,奔波儿河友表述的是你所说的问题。
其实我想的是那家人孩子男女分布、大小分布的问题,表述出来是那家人另一个孩子是男是女问题。
懒厨河友表述的是你所想的问题,奔波儿河友表述的是你所说的问题。
也不对,懒厨河友的问题应该改为:不管等一个硬币是字是花。两个硬脂同为字的机率是多少。因为1/3的推导,完全不考虑开出的那个的结果。考虑了,还上1/3。
因为一儿一女有两种组合,长女次男,或者长男次女,可能性比两个儿子大一倍。
如果大的是儿子,女男的可能就不存在,只有两种可能,如果小的是儿子,男女的可能就不存在,同样只有两种可能,分别讨论就会更清楚,这也许麻烦,但不会有错,在争论了那么多都没结果的情况下,你不应该拒绝。就算我错了,请你拿个正确的模拟方案出来吧,比说服不了人的争论好吧。
或者说语义的歧义之处。我把这个问题说出“遇到”男孩,仍然不够准确,应该说“遇到有”男孩的家庭才对。否则会引入一个“带男”还是“带女”出来见人的先验概率,对答案的影响是在1/3和100%中变动。
如果二者概率50%,答案还真是1/2,如果是个宠女狂魔,“有女必带”,则另一个是男孩的概率为100%,我的理解相当于“有男必带”,于是得到1/3。
不少同学可能是基于这里的原因选择1/2,那也不能说错,比如zero999
同学,【讨论】趣味数学题
因为你只看到了一个儿子,当时你不知道这个儿子是长男还是次男。
既然不知道,你就必须把两种组合都考虑进去。
都会让一种情况变得不可能,哪一种变得不可能取决于那个儿子是大还是小,但另一个孩子是儿子的概率都一样。
所以说辞不达意
其实我想的是那家人孩子男女分布、大小分布的问题,表述出来是那家人另一个孩子是男是女问题。
奔波儿河友表述的是你所说的问题。
你所想的问题是:这两个孩子都是男的,且另外一个小的概率。现象无非女大女小,女大男小,男大男小,男大女小,每一个组合的概率1/4。但是对于眼前这个,你的处理就很特别了,在考虑大小的时候,把性别给考虑进去了:女大女小,女小女大,男大女小,男大男小,男小女大,男小男大,一共6个组合。已知一个是男,那么另一个是男的机率当然是2/6=1/3。所以你的问题是:已知那家人有两个孩子,在不知一个是男孩的前提下,且在已知道一个是男孩的前提下,排列两个孩子的大小,不考虑两个孩子大小排列结果的情况下,另一个是男孩的概率是多少。——条件很拧巴,有相互否定,所以得出的计算结果也很拧巴。
后面的3/7,1/2也是如此。并不是统计结果反常式,是统计条件反逻辑。
首先感谢diamond老兄回复.我在老兄的大作里学到不少东西,特致谢忱.
其实我觉得很多人是不自觉的扩大了样本空间,把已经发生的事情放到概率里面考虑来了.比如看到邻居带出一个孩子,就考虑邻居带出这个孩子的概率.这其实是不对的.
在这里,我故意让邻居在最后多说了一句"他是星战迷".前面双眼皮的例子说明,更多的信息是有可能进一步改变样本空间的.这里要不要考虑"星战迷"这个信息?把孩子分成"星战迷"和"非星战迷",进而修正我们的估计?答案是不需要,因为我们不知道"星战迷"和"非星战迷"的概率,而且也不能简单假设1/2,(显然星战迷的概率不可能是1/2),所以我们无法运用这个信息,所以我们可以安全忽略这个信息,就接受这是个客观事实即可.
同样,看到邻居带出来一个孩子,这是一个客观事实,是已经决定的事情,我们完全可以忽略这个信息,就当他是个已经发生的事实,而不考虑带出哪个孩子的概率.有些同学假设家里有两个孩子,父母带出其中某一个孩子的概率就是1/2,这是不对的.万一当地的风俗是女孩不出门,家长只能带男孩子出门而女孩子只能留在家呢?我们不知道,所以应该存而不论.
就像现在这个版本里的星战行头,那我们要不要可考虑我邻居没买星战行头,而是买了彩虹小马,带回家来,而他闺女是彩虹小马的粉丝的情况呢?显然没有这个必要.
仔细看了一下你的代码,严格的模拟应该是这样的:
循环10000次
两个随机变量K1, K2 代表两个孩子,其值为0则代表为男孩,1代表为女孩。
再随机从K1,K2挑一个出来,如果其值为0则将K1,K2放入某个数组,(0代表第一次见到的男孩,如果抽到女孩则放弃,不符合条件,不用放入数组)
该数组有三个字段(K1,K2, FirstMeet)FirstMeet字段代表抽中的是是K1还是K2
循环完毕之后,再对数组进行统计,算法如下:
对数组进行循环,
如果FirstMeet==K1,且K2==0 则BoyCount++
如果FirstMeet==K2, 且K1==0, 则BoyCount++
最后计算 BoyCount/数组总量,得出结果
这个才是逼真的模拟