- 最后登录
- 2013-2-8
- 在线时间
- 1 小时
- 阅读权限
- 5
- 注册时间
- 2009-10-20
- 积分
- 3
- 帖子
- 3
- 精华
- 0
- UID
- 1239870
- 性别
- 保密
- 积分
- 3
- 帖子
- 3
- 精华
- 0
- UID
- 1239870
- 性别
- 保密
|
- (*总人数*)
- renshu = 100;
- (*实验次数:*)
- cishu = 10000;
- chenggong = 0;
- For[kk = 1, kk <= cishu, kk++,
- qiutu = {};
- hezi = {};
- haoma = Table[i, {i, 1, renshu}];
- For[ii = 1, ii <= renshu, ii++,
- fanghaoma = RandomInteger[{1, Length[haoma]}];
- AppendTo[hezi, haoma[[fanghaoma]]];
- haoma = Delete[haoma, fanghaoma];
- ];
- For[ii = 1, ii <= renshu, ii++,
- For[jj = 1, jj <= renshu/2, jj++;,
- If[Length[qiutu] < ii,
- AppendTo[qiutu, {hezi[[ii]]}],
- AppendTo[qiutu[[ii]], hezi[[Last[qiutu[[ii]]]]]];
- ];
- If[Last[qiutu[[ii]]] == ii, Break[]];
- ];
- If[jj > renshu/2, Break[]];
- ];
- If[Length[qiutu] == renshu, chenggong += 1(*; Print[qiutu]*);];
- ];
- Print["成功次数" <> ToString[chenggong]];
- Print["实验总次数" <> ToString[cishu]];
- Print["成功的概率" <> ToString[chenggong/cishu // N]];
复制代码 虽然不是很清楚所谓的数字环的理论,但是我觉得这种方法还是不错的.上面是我按照该思想做的Mathematica 程序.当然未必是最短的程序,但是实验次数不是很多时,还是可以出结果的.
成功次数3108
实验总次数10000
成功的概率0.3108
经历的时间是174秒,我还是可以接受这么长时间的.
程序中的(*; Print[qiutu]*)改成Print[qiutu]后可以输出成功时的抽取方法.但是如果实验次数很大时,输出会很长的.如果实验10次成功2~4次那么输出一下可以形象地看出抽取的过程.
[ 本帖最后由 ggggwhw 于 2009-10-21 09:27 编辑 ] |
|