求一个概率算法,给出算法者立即给分。

java_skater 2007-07-31 02:02:51
1-1000 取一个随机数a
用a做数组b大小,然后每个数组元素用1-1000的随机数填充,然后求数组b之和,1000*1000*0.7为c,问b大于c的概率。
...全文
1498 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheng376 2007-08-02
  • 打赏
  • 举报
回复

关于概率问题,最直接的办法就是实际计算
通过上万次的计算实验,把符合结果的次数记下来, 概率=实验结果/实验次数。

上面的数据,每次实验产生三个随机数就可以了,写一个10000次的循环,定义一个结果变
量实现累加 ,大概用不了半分钟就ok 了
Love_My 2007-08-01
  • 打赏
  • 举报
回复
不懂的路过
mingtian911 2007-08-01
  • 打赏
  • 举报
回复
补充C[a[i]]包括C[a[i-1....i-2....3.2.1]]特例,要减去这些重复项
mingtian911 2007-08-01
  • 打赏
  • 举报
回复
为说明问题,考虑等于1000×1000×0.7情形
数学描述:
假设实验次数为N,数组a[1-1000]每种出现可能性N/1000,理论上N/1000>1000^i(i为数组a的大小),即N>1000^1001为最佳测试次数,能够保证遍历所有情形至少一次。

对于a[1]-a[699] 数组之和b>c次数为C[a[i]]=0
a[700] C[a[700]]=1
当i>700时
计算a[i]之和>c的平均值v,从而保证数组元素a[j](1=<j<=i)取值在v附近,即部分数组元素序列组合之和为v,从而可寻找到满足条件最小集,据此可计算数组C[a[i]];


概率D=(C[a[1]]+C[a[2]]+...+C[a[i]]+...+C[a[1000]])/N

以上只是理论上的,没有实际计算意义。






lv810 2007-08-01
  • 打赏
  • 举报
回复
概率也就在7%左右
莫再琪莫再贾 2007-07-31
  • 打赏
  • 举报
回复
关注中!!
skillwell 2007-07-31
  • 打赏
  • 举报
回复
写错了一点
A(n)是在n个数中,减去总和不多于m的所有组合的所有的可能情况的个数。晕,针绕嘴
A(n)是在n个数中,减去(总和不多于m的数的所有组合)的所有的可能情况的个数。这下好像不容易产生歧义。
skillwell 2007-07-31
  • 打赏
  • 举报
回复
1 数学算法:
定义m=(n-700)*1000, 699<n<1001

A(n) =1 + n + n^2/2! + n^3/3!…… + n^m/m!;
B(n) = A(n)/1000^n;
C = B(700) + B(701) + …… + B(1000);
D = C / 1000;

D就是结果了

解析:
明显,当n>699时才有可能
对于每一个n>699的情况,我们可以看作所有数组都是由最大值(1000)减去一个0至999的随机值取得;所以对于每一个n,满足条件的减去的总数值不能超过m
A(n)是在n个数中,减去不多于m个数的所有的可能情况的个数。而n个数所有的可能情况是1000^n;
所以B(n)是对于单个n 满足条件的概率。而n总共有1000种可能,所以,总的概率是D
java_skater 2007-07-31
  • 打赏
  • 举报
回复
感谢各位答案,虽然问题还没解决,明天来了给分,希望还有各位大师给些提示.
nattystyle 2007-07-31
  • 打赏
  • 举报
回复
a数随机,填充数随机,答案随机!!!
masse 2007-07-31
  • 打赏
  • 举报
回复
s1+s2 = 1*1000^1+1000^2+...+1000^1000
masse 2007-07-31
  • 打赏
  • 举报
回复
不好意思
s1 = 1*1+1000^2+...+1000^n+...+1000^70
masse 2007-07-31
  • 打赏
  • 举报
回复
a: [1,1000]
b.length: a
b[i]:[1,1000]

当a<=700的,不予考虑,这里有s1 = 1*1+2*1000^2+...+n*1000^n+...+70*1000^70种取法
然后算a>700的情况,假设有s2种,大于700000的有s3种,
那么结果就是
s3/(s1+s2)

这个东西直接算不现实。必须要用一些小技巧。
下面的回复中,我会说一下这个。

java_skater 2007-07-31
  • 打赏
  • 举报
回复
跑出来很简单的,关键是要求需要有个参数可控制的来影响这个结果,
我目前只做到了影响这个结果,但是还不是可控制的.
我分多的是,几年都没来这里了,只有有好答案,新开帖子给分都行.好答案直接给300分.
laoda88 2007-07-31
  • 打赏
  • 举报
回复
给点分吧 这么耐心的给你跑了10分钟的循环 我都没循环出直来
laoda88 2007-07-31
  • 打赏
  • 举报
回复
对 不可能 不知道楼主你怎么算出来的4/10000
laoda88 2007-07-31
  • 打赏
  • 举报
回复
楼上算错了

数组b之和-c
不是
数组b长度-c
..........................
我写错了 算的是b的合-c
  • 打赏
  • 举报
回复
b 的和不可能大于 700000,它的期望均值是 250000,也就是说它的和要大于 500000 都是很困难的。
laoda88 2007-07-31
  • 打赏
  • 举报
回复
什么关系
java_skater 2007-07-31
  • 打赏
  • 举报
回复
这个1000*1000*0.5我跑100000 b>c概率是500/1000
这个1000*1000*0.7我跑100000 b>c概率是4/1000
这个1000*1000*0.9我跑100000 b>c概率是1/1000

我想知道这个之间的关系.
加载更多回复(11)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧