打靶
一运动员打靶,靶一共10环, 求打10枪后总成绩58环的可能。下面的代码内存不够Join @@ (Permutations /@ IntegerPartitions]) //Length // Timing 不知道Mathematica的Probability函数能不算这道题 缺少分析数据的
比如该运动员平均成绩 你不能从0-10随机的 1# chyanog
假如,每一枪都在1到10环中均匀随机,那么:
10枪打58环的可能是:0.0410820025
附上python代码:import numpy as np
def nDm(n,m,x):
'''同时掷n个m面(面上的数字为1到m)骰子,和为x(x<=n*m)的概率'''
if x<=n*m and x>=m:
Alpha=np.ones(m+1)/m
Alpha=0
alpha=Alpha
for k in range(1,n):
alpha=np.convolve(Alpha,alpha);
return alpha
else:
return 0.0 楼主例子给的不太对,简单的说,就是十个均匀【1,,10】的随机数和小于58的概率是多少。xx=x/@Range;Probability<=58,Distributed[#,DiscreteUniformDistribution[{1,10}]]&/@xx]用Probability也很慢的,我跑n=7的情况,等了N久
1246029/1250000 4# 无心人
也有可能打不到,补充一个链接
http://blog.csdn.net/hehe9737/article/details/7008552 Sum, {i, Total, {2}]}]/10.^6 // Timing 1# chyanog
动态规划:
设p(n,S,m) 表示连续n枪,每枪不超过m环,总成绩为S的概率,则
p(n,S,m)=\sum_{k=0}^{m}p(n-1,S-k,m)
其中,
p(1,S,m) = 1/{m+1},S<=m
p(1,S,m) = 0,S>m
如BeerRabbit 在#5 所示的卷积,很方便 本帖最后由 chyanog 于 2013-3-20 17:28 编辑
5#的代码我翻译了一下,ListConvolve这部分不知道能否再简化一些?
m = n = 10;
x = 58;
A = Table~Join~{0};
a = A;
Do~Join~
Take, -m], {n - 1}];
a[]
Clear["`*"]
(*ans 16432801/400000000*)
(*0.0410820025*)
页:
[1]
2