前几天,博客摘录了《裘法祖:“做人要知足,做事要知不足,做学问要不知足。”》,后来又写了《一个概率题:从1138号中抽签514号,有14个连号的概率多少?》。
这里好奇心、好战(喜欢挑战)心,好斗(不服输)心,也许在作怪,心里反反复复,一直放不下。也许是对“做学问要不知足”做了一个绝好的注释。
从小就有一句话:学好数理化,走遍天下都不怕。这句话以偏概全,也许误导了好几代人,因为学好数理化不是充分条件。但是在许多时候数学是成功的必要条件(要求)。比如,学好数学的排列组合概率,你对中彩票会有相应的理解,也绝不会上传销的当。
在这次老河口市14连号,与上次武汉市6连号事件中,就有许多常识问题要提醒大家。
上次武汉6连号,已证明是舞弊,相关人员就已被处理。
这次老河口市居然14连号,一下子更是引起轩然大波。因为直观上,6连号是作弊,14连号的绝对更是作弊。网上的博客,一些记者(学文科的概率极大)纷纷撰文,有一个标题最有意思《“6连号”是丑闻,“14连号”是趣闻?》,其中质疑“估计武汉“6连号”当事人要郁闷了,人家“14连号”都是正常的,为什么当初要揪着我“6连号”不放?”。
我不想介入敏感话题,也希望并相信相关部门能调查清楚,还原事实真相。在这里我只是就数学问题进行科普:这次14连号的概率真的比6连号大得多,而且已到了不能忽略不计。
理由是:武汉市是5141选124名,出现6连号。老河口市是1138名选514名,出现16连号。
分析:
武汉,每个中签率是124/5141=2.412%, 出现6连号的概率是千万亿分之一,(据专家数据,本人严重怀疑;本人估算约为亿分之一;按下不提)。这种事情基本上为不可能时间。这就是常识。
老河口市,每个中签率是514/1138=45.167%,出现14连号的概率为0.84%。(又有专家得出1.49%的概率,这和本人目前的错误算法如出一辙,且看下回分解)。这种概率比彩票(六合彩等)的概率多几千几万倍,已不能忽略不计。因为根据百度数据:
看“国家统计局网站”或者“行政区划网”
县级市374个;1642个县(自治县、旗、自治旗、特区和林区)。 截至2003年底,全国县级以上行政区划共有:23个省,5个自治区,4个直辖市,2个特别行政区;51个地区(州、盟),比上年减少了6个;660个市,其中:直辖市4个;地级市282个,比上年增加7个;县级市374个,比上年减少7个;1642个县(自治县、旗、自治旗、特区和林区),比上年减少7个;845个市辖区,比上年增加15个。全国共设有5个自治区;30个自治州;117个自治县;3个自治旗。
就是说,如果600个市,按0.84%概率,会有5个市出现这种情况。
这里我用极端的比喻解释: 因为老河口中签率高,中签数又高,所以14连号的概率非常高,如果算6连号的可能性几乎百分之百。大家想象一下,如果1138个选13个,不可能有14连号;选14个,可能是14个都在一起,也许是千万亿分之一;如果1138选1138个,那么14个连号以上是百分之百,因为1138个号全连一起。搁东北话说:“那是必须地”。
所以大家姑且用平常心,静观事态发展。如果有舞弊,好,抓一个是一个。不过没有,就相信这是个趣闻吧。
我觉得人活着要有追求,有思想,有活力。所以求知欲、创新能力、坚韧性非常重要。至少对延缓“帕金森综合症”有绝对好处。这里我将“做学问要不知足”简单解释成好奇心+好战心+好斗心几个特性。
我的博客一稿多投,却发现这个挑战题的回应不同。
· 我个人网站(www.vincentyang.cn):这个网站自从遵守**法令,去掉匿名回帖后,就没法回帖了。只是作为我的文稿存档。
· MSN Live Space:这幸亏有个医学博士朋友,被我点名挑战,回答了。(答案基本思路与我错误一样)。
· 一个医学网上博客:几乎没人知道,我都不看。
· CSDN 博客:这有18个回复,出乎我的意料。其中还有引到另一个网站(http://www.newsmth.net/bbstcon.php?board=Mathematics&gid=72337),看来我绝不是绝无仅有的“闲的病”患者。只是其中有些解法我“有看没有懂”。
· CSDN学生大讲堂:没有一个答案,这也出乎我的意料。因为我觉得,学生应该有能力,时间,精力来解决这类问题。固然现在哪的人气还不旺,但是是否大家都缺乏一种“好学、好战、好斗”精神,这有点令人担忧。
所以在裘老“做学问要不知足”鞭策下,花了点时间动手解题,其中一波三折,富有戏剧性。
这是个典型的排列组合问题。可以看做有1138个格子,在其中选出514个格子放上标志(比如放个珍珠)。
所以,所有的可能总数为
其中:有14个连号的情况如下:
第一步假想先有14个珍珠,连成一串14节的项链,放在1138个格子上,那么项链头可放在1, 2, …, (1125=1138-14+1)格上,(因为从1126格开始,项链尾就出了1138格了)。共有1125种可能性。
第二步,就是把余下的500=514-14个珍珠放在余下的1124=1138-14个格子里。这又是典型的排列组合:
所以答案是:
(注:这里面包括了多个14连号,15个以上连号的问题,所以这个概率数严格的定义是有14或更多连号的概率)
有了这样的答案,就好办了,懒鬼杨某绝不会用计算器一个一个键敲的。
第一选择是Excel,碰壁,居然没有组合函数!
得,第二方案:我自己写程序。估计不用100行,容易。设计也很简单,一个阶乘子函数double Factorial(int N); 一个组合子函数double Comination(int M, int N),再加个子函数MyPossibility(int m, int n, int length),主函数直接调用,在屏幕输出就好了。十分钟搞定。
结果,系统出错。设断点,查Bug。
傻了:即使我已经英明的选用了64位double数,可以存大约324位十进制数,1138!绝对没法算,专业术语叫系统溢出。
(注:这就是项目管理中说的,凡是你认为不可能发生的问题,一定都会发生!也就是许多软件看上去简单,实际上所好都有技术含量,一分钱一分货。
昨天和一个院长谈,他说他们医院选了一家北京公司做HIS,结果做了两年内没做出来,现在可能做不下去了。仔细一谈,原来系统大约四、五十万,还要求按照他们的要求订做,还希望有LIS,PACS。我和院长说,这个价,你没法做,失败是意料之中的。我给他算一本帐,现在一个本科大学生,大约3000-3500一个月,加上五险一金,每个月成本至少5000。四、五十万扣掉营业税,差旅费,只够我请4~5个大学生做两年。那你得到的就是大学生给你的产品。因为任何系统做好都要花大钱的,绝不只是算一张光盘多少钱,而且都是定制的软件是没法维护的)。
直接算没戏了,只好回到数学算法来简化,结果比想象的简单:
这样,算法就非常清晰了,而且,分解到最后一步,就不怕溢出了。 就是用Excel,也能算出来:
P(1138,514,14) = 0.014995 // 14个连号以上
P(1138,514,15) = 0.006664 // 15个连号以上
这样14连号(不含15以上连号)的概率为0.00833
好了,到此为止,我的算法理论上看似完美,和许多大专家观点一致。可以开始写博客了,发表解法了。
呵呵,“做事要知不足”,否则绝对报应。
首先,我用算法顺便就想算算出现1连号,2连号,…,20连号各多少?(好奇心,想画一个曲线,看看趋势)
又傻了,屏幕显示:
P(1138, 514, 1) = 514
P(1138, 514, 2) = 231.706502636204
P(1138, 514, 3) = 104.339251846734
P(1138, 514, 4) = 46.9342937444375
P(1138, 514, 5) = 21.089418334505
P(1138, 514, 6) = 9.46606166866227
P(1138, 514, 7) = 4.24427125126252
P(1138, 514, 8) = 1.90092360811846
P(1138, 514, 9) = 0.85045742326078
P(1138, 514, 10) = 0.380071680306808
P(1138, 514, 11) = 0.169668845770267
P(1138, 514, 12) = 0.0756590686369187
P(1138, 514, 13) = 0.0337008451248742
P(1138, 514, 14) = 0.0149947810013872
P(1138, 514, 15) = 0.00666434711172764
P(1138, 514, 16) = 0.00295863808607837
P(1138, 514, 17) = 0.00131202294467233
P(1138, 514, 18) = 0.000581172373887833
P(1138, 514, 19) = 0.000257146741702378
P(1138, 514, 20) = 0.000113649676020247
啊?有概率 》100% ? = 51400%?一看就错了。
再分析,按我的解法,有许多重复计算的错误,
1) 比如14个一串的项链,前头加1个,或后头加1个,成为15个一串时,被重复统计。
2) 如果有两串14个一串的项链,同样被统计了两次。
3) 类似重复统计的可能性太多,且不能简单排除。
同时,通过一个5个选3个案例,手工列举所有10种可能;有1连号、2连号,3连号的的概率为10%,60%,30%。 不一定是越短越大。而通过我原来的算法,2连号的概率为120%,所以绝对错误。
(注:在CSDN博客上,有XYYHun 的程序模拟出来的结果是: 摇奖1000000次,出现14次连号次数8443,概率为0.008443。我比较相信,如果算法验证无误,这是检验正确答案的最佳方法。)
(又注:上述0.84%概率是包括15个以上连号的,与我得到的0.83%,碰巧想近,但不是一个概念)
嗨,害人害己,原想挖个坑害人,结果把自己坑进去了。一整个周末,脑子了挥之不去的诱惑,最后得到的“自叹不如,江郎才尽”的感叹。想过一些递推或递归的算法,但我知道这都不是我现在数学能力能解决的了。
好吧,洗洗,睡吧。
难道这就是裘老说的“做人要知足”? 太不甘心了!
URL: http://vincentyang.cn/blogs/vincentyang/archive/2009/08/02/860.aspx