从14连号概率题来看“做学问不知足”

前几天,博客摘录了《裘法祖:“做人要知足,做事要知不足,做学问要不知足。”》,后来又写了《一个概率题:从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个格子放上标志(比如放个珍珠)。

所以,所有的可能总数为

/"clip_image002/"

其中:有14个连号的情况如下:

第一步假想先有14个珍珠,连成一串14节的项链,放在1138个格子上,那么项链头可放在1, 2, …, (1125=1138-14+1)格上,(因为从1126格开始,项链尾就出了1138格了)。共有1125种可能性。

第二步,就是把余下的500=514-14个珍珠放在余下的1124=1138-14个格子里。这又是典型的排列组合:

/"clip_image004/"

所以答案是:

/"clip_image006/"
/"clip_image008/"

(注:这里面包括了多个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个大学生做两年。那你得到的就是大学生给你的产品。因为任何系统做好都要花大钱的,绝不只是算一张光盘多少钱,而且都是定制的软件是没法维护的)。

(三)简化算法:

直接算没戏了,只好回到数学算法来简化,结果比想象的简单:

/"clip_image006[1]/"
/"clip_image008[1]/"

/"clip_image010/"

/"clip_image012/"

/"clip_image014/"

/"clip_image016/"

这样,算法就非常清晰了,而且,分解到最后一步,就不怕溢出了。 就是用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

你可能感兴趣的:(编程,算法,Excel,项目管理,百度,产品)