主题:【讨论】【跟进】趣味数学题 (三) -- 数值分析
帖子在这里你仍在误导读者,但还是没做好
至于
不好意思,俺被爱坛封口很久了。具体经过可看此帖软件加上历史等于什么?
稍等一下,我吃完饭写个程序示范一下
是Java写的,写得急了点,将就看吧:
package com.mycompany.app; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * Hello CCHere! * */ class Stat { public boolean k1; public boolean k2; }; public class App { //true is a boy, false is a girl //true if k1 is selected, false if k2 is selected for the first meeting public static boolean getRandomTrueOrFalse() { Random random = new Random(); return random.nextBoolean(); } public static void main( String[] args ) { boolean k1; boolean k2; float anotherKidIsBoyCount; List<Stat> ls = new ArrayList<Stat>(); for (int i=0; i<10000; i++) { k1 = getRandomTrueOrFalse(); k2 = getRandomTrueOrFalse(); if (k1 || k2 ) { //if one of the kid is a boy, add they to the statistic list. The two girl scenario can be removed Stat st = new Stat(); st.k1 = k1; st.k2 = k2; ls.add(st); } } anotherKidIsBoyCount=0; for (Stat st : ls) { if (st.k1) { //if first kid is selected and first kid is a boy if (st.k2) {// if second kid is a boy, increase the counter anotherKidIsBoyCount++; } } else { if (st.k2) { // if 2nd kid is selected , and second it is a boy if (st.k1) { //if first kid is a boy, increase the counter anotherKidIsBoyCount++; } } } } System.out.println("cchere math question answer: " + String.valueOf( anotherKidIsBoyCount/ls.size())); } }
输出是:
cchere math question answer: 0.33188406
if (st.k1) { //if first kid is selected and first kid is a boy if (st.k2) {// if second kid is a boy, increase the counter anotherKidIsBoyCount++; } } else { if (st.k2) { // if 2nd kid is selected , and second it is a boy if (st.k1) { //if first kid is a boy, increase the counter anotherKidIsBoyCount++; } } }
这段代码有其实可以简化为
if (st.k1 && st.k2) { anotherKidIsBoyCount++; }
我写得那么麻烦,存粹就是为了模拟见到第一个,检查第另一个孩子的场景。
啥叫zero999选1/2不能说错。这类问题,如果不特别指出,缺省不会对带男孩还是带女孩做区别对待。当然你所说的宠女狂魔和有难必带导出的结论都是成立的。
兄台谬赞,不敢当。
个人觉得吧,细究起来,“带男孩子玩具回家”和“带男孩子出来被遇到”还真不一样,前者的等效描述是“家里有至少一个男孩”,后者是“家里有至少一个男孩,并且被带出门了”,实际上多了一个条件,而且影响概率的。
如果是后者的话,样本空间里除了去掉女女 ,还需要去掉一男一女且女孩被带出门的25%,再算下来就是1/2了。
我猜很多同学都是在这个隐含假设下考虑的。
至于“星战迷”这件事情,恐怕会轻微增大男孩的概率,和“双眼皮”的效果类似。严格论起来,不能因为我们不知道某个先验概率就不予考虑,只能说条件不明确,无法得到量化的结果。貌似任何不起眼的细节都会有影响,比如告诉你那个孩子叫“汤姆”,会不会影响概率?细想之下都不敢乱说话了,哈哈。
这段
anotherKidIsBoyCount=0;
for (Stat st : ls) {
if (st.k1) { //if first kid is selected and first kid is a boy
if (st.k2) {// if second kid is a boy, increase the counter
anotherKidIsBoyCount++;
}
}
else {
if (st.k2) { // if 2nd kid is selected , and second it is a boy
if (st.k1) { //if first kid is a boy, increase the counter
anotherKidIsBoyCount++;
}
问题出在这个“ else ”上。这里你进入选第二个男孩的条件是第一个孩子不为男。问题是,邻居要带第二个男孩出去的情况只有两种,BB 或 GB。你的条件把 GB 排除了。但也同时排除了 BB。 如果你在两个循环里各加一个 counter 看各自的积累,你会发现只有第一个循环起了作用,第二个循环的累积是 0。
这样你就没有真正模拟你自己在程序里想模拟的现象。
正确的模拟是把 “ else ”去掉,分母则是 老大、老二分别带出去散步的男孩的组合。组合见下表:
同行 | 留家 |
---|---|
大哥(B1) | 二哥(B2) |
二哥(B2) | 大哥(B1) |
大哥(B1) | 二姐(G2) |
二哥(B2) | 大姐(G1) |
另一个孩子是男孩的几率是二分之一。
是写得太啰嗦了,思路如下:
如果家长带出来的是第一个孩子,且孩子是男孩,就检查第二个孩子是否是否男孩,如果也是,则计数器加一;
否则,如果家长带出来的是第二个孩子,且孩子是男孩,就检查第一个孩子是否男孩,如果是,则计数器加一。
由于开头已经把全是女孩的情况排除掉了,上述的如果。。。否则。。。一定会有一个成立。
写完我发现太啰嗦,等价的逻辑,其实就是:是否两个都是男孩!这个就简单多了。
看看能否说清楚。
首先把三门问题扩展到100门问题。100个门里只有一辆汽车,其余都是山羊。由于是等可能的,可以近似认为做100次实验,在100次实验里每个门里有且仅有一次是汽车。不失一般性,挑战者每次都选1号门,然后主持人打开98道有山羊的门,然后问挑战者是否换门。现在这个问题转化成做100次实验,挑战者换门和不换门成功的次数。这是一个确定性的问题,答案很显然,分别是1和99。
现在用同样的思路考虑两个孩子的问题。假设生男孩和女孩的概率相同。那么两个孩子共有4种可能,男男,男女,女男,女女。如果骰子掷四次,可以近似认为4种选项会各中一次。下面是最有争议的地方,”先看到了一个男孩“这句话到底是什么意思?我的理解是 对骰子的投掷情况进行了限制,如果投掷时选到女女选项,这次投掷就不算数。然后从男男,男女,女男 3个选项中选 男男,这个概率是三分之一。“先看到了一个男孩”这句话说完整了之后,就是"每次看到一个男孩后,问第二个孩子也是男孩的概率"。这句话等价于“如果第一次看到一个女孩,就当做没看见。只有第一次看到的是男孩时,我们才开始考虑第二个孩子是否也是男孩的概率”。
“先看到一个男孩”是否与“家里至少存在一个男孩”等价?一男孩一女孩的家庭需要做两次实验才能确认“家里至少存在一个男孩”,而两男孩的家庭只要做一次实验就能确认。两者好像不是等可能的。让我再想想。
用你投掷骰子的步骤来推理
你这里只刨除女女选项是不符合你自己的定义的。你自己说了“如果第一次看到一个女孩,就当做没看见。只有第一次看到的是男孩时,我们才开始考虑第二个孩子是否也是男孩的概率”。这个定义其实除掉了女男的选项。于是剩下的,只有男男,男女。所以概率还是二分之一啊。
楼上唐家山的模式才是正确的描述。
很显然,原题是说你碰到邻居带了个男孩出来,邻居共有两个小孩,另一个没看见的小孩的性别未知。那么很显然,组合只可能是 男男,或是 男女。不存在女女,或女男的情况(因为你没看到女孩,只看到一个男孩)。那么另一个孩子是男孩的几率不就是二分之一吗?
“先看到一个男孩”讲顺序。所以说一下等效命题这个帖子里的等价命题里有
这里也是有顺序的。先出生孩子等价于你看到的邻居的孩子,未出生的等价于你没看到那个。
而“家里至少存在一个男孩”则不讲顺序。所以男男,男女,女男都成立。
最开始那个不一样,因为看见什么和有什么不是一回事,在一儿一女的家庭里,先看见的也可能是女儿,虽然那个问题中没提到,但我认为有一半的可能会是这种情况,那么我们要考虑的一儿一女的家庭也只是其中的一半,答案是1/2。如果在一儿一女的家庭中先看见的一定是儿子,那就是条件概率了,答案是1/3,但我没看见这样的理由。
你的程序我真不喜欢,你关于怎么写程序的意见我也没兴趣。如果你那么喜欢List,就不该用需要编译和List都需要import的语言,那真是很麻烦,也许Javascript更适合你。
主帖的等效是这样:
已知:有两个孩子,其中至少有一个男孩
问:两个都是男孩的概率是多少?
这样就是1/3.
如果已知:有两个孩子,其中老大是男孩
问:老二是男孩的概率是多少?
那就是1/2。
你这个得表述为:两个硬币,已知其中有一个是正面朝上(但是不确定是哪个硬币),那么两个都朝上得概率是1/3;只要你明确了是哪个硬币正面朝上,概率就是1/2