概率模拟华中科技大学概率统计系副主任王湘君, 哪里错了1
发信人: cutepig (聪明猪), 信区: Python
标 题: 概率模拟:华中科技大学概率统计系副主任王湘君, 哪里错了?
发信站: 水木社区 (Fri Jul 31 21:40:09 2009), 转信
大家帮我看看哪里写错了, 我写的测试程序计算出来概率几乎为0了
http://www.newsmth.net/bbstcon.php?board=NewExpress&gid=11062084&start=11062084&pno=1
发信人: FullHouse (醉读女人心), 信区: NewExpress
标 题: 华中科技大学概率统计系副主任王湘君
发信站: 水木社区 (Fri Jul 31 08:41:47 2009), 站内
1138户中选514户,514户中出现14人连号,这种现象出现的概率有多大?
记者就此连线了华中科技大学概率统计系副主任王湘君。
经半小时核算,王湘君说概率为1.4%。
我的思路跟下面说的一样
发信人: rainarch (尘纹), 信区: NewExpress
标 题: Re: 华中科技大学概率统计系副主任王湘君
发信站: 水木社区 (Fri Jul 31 10:20:47 2009), 站内
我算不出来,用程序模拟一下,具体如下:
-
每次用随机数对1138选514
-
每回合摇号摇100,000次,统计出现14连号以上,也就是包含14+的次数。
-
总共3回合。
结果如下
14+次数
回合1:815
回合2:841
回合3:811
合计+:2467
也就是说命中率 0.82%
这个不是完全意义上的统计概率。
附源代码:
import random , os
def GenAndCheck(n,m,same):
data=[]
#gen m number
for i in range(m):
data.append(int(random.random()*n))
#check
data.sort()
for i in range(m-same):
if data[i+same-1] - data[i]==same-1:
return True;
return False
if 1:
okNum=0
n=1138
m=514
same=14
loop=100000
for i in range(loop):
if GenAndCheck(n,m,same):
okNum += 1
if (1+i)%100==0:
print i+1, okNum
print "result is" ,1.0 * okNum/loop
发信人: shell (func_code), 信区: MathTools
标 题: 1138选514的Python的数值模拟
发信站: 水木社区 (Fri Jul 31 20:08:51 2009), 站内
只考虑了14连号情况,如果大于14,例如15连号、16连号……则不算。
from future import division
import random
import time
from itertools import groupby
from operator import itemgetter
def tossup():
content = xrange(1138)
data = sorted(random.sample(content, 514))
length = max(len(map(itemgetter(1), g)) for k, g in
groupby(enumerate(data),lambda (i,x):i-x))
if length >= 14:
return 1
else:
return 0
def main():
total = 0
valid = 0
step = 100000
while True:
total += step
valid += sum(tossup() for _ in xrange(step))
print total, valid/total, time.ctime()
if name == “main”:
main()
算出来,结果大约是0.455左右。直接求解不会求,晕啊。
–
发信人: shift (负债累累), 信区: NewExpress
标 题: Re: 华中科技大学概率统计系副主任王湘君
发信站: 水木社区 (Fri Jul 31 09:19:52 2009), 站内
嗯,我也是这么算的
- 【 在 mchd (hot) 的大作中提到: 】
-
(c500 1124 * 1125)/(c514 1138)
发信人: shift (负债累累), 信区: NewExpress
标 题: Re: 华中科技大学概率统计系副主任王湘君
发信站: 水木社区 (Fri Jul 31 09:31:02 2009), 站内
从n个数里面选m个,至少有k个连号的情况是:
(n-k+1)C(n-k,m-k)/C(n,m)
至少k+1个连号
(n-k)C(n-k-1,m-k-1)/C(n,m)
刚好k连号
上面式子相减
发信人: mcx (aaa), 信区: NewExpress
标 题: RE这个Re: 华中科技大学概率统计系副主任王湘君
发信站: 水木社区 (Fri Jul 31 11:11:14 2009), 站内
我估算了一下,就只考虑14连号的情况,1138选514的可能种数是是C(1138,514),简单地认为14连号的情况一种有1125种,即:1~14,2~15,…,1125~1138。这样的话,14连号剩下的1124个选500个就是C(1125,500),由于 C(n,m)=n!/(n-m)!/m!
算概率就是C(1125,500)*1125/C(1138,514)
实际上,14连号的情况比C(1125,500)*1125要少,因为有15连号等情况在这里考虑时有重复,需要去除,但估算概率的话,15连号等重复情况肯定是比较少,情况的总个数应该在这个数量级上
用matlab算这个:
5015025035045055065075085095105115125135141125/1138/1137/1136/1135/1134/1133/1132/1131/1130/1129/1128/1127/1126/1125
=0.015
大概是1.5%的概率,然后去除一些小量的重复情况,概率是1%的数量级应该是差不多的。
- 上一篇 分析几个驱动
- 下一篇 常用的物理引擎,图形引擎