...这是我2005年12的课程设计中程序的核心部分,写完后自己非常得意,等着老师表扬。等啊等,等待现在也没等到 :-D
现将它献给大家...(若有版权那遵守BSD吧 :-))
注1:程序以前是用Matlab写的现用Java重写
注2:原程序中 galton返回值为 int[] grid 、没有“输出结果”部分
public void galton(int sumOfGrid, int sumOfBall){ int[] grid = new int[sumOfGrid]; int number = 0; //一个小球从顶端落下过程中向右偏移的总次数 int rand ; //随机数,取值范围为{0,1},为0、为1的概率相等 for( int counter_ball = 1;
counter_ball <= sumOfBall;
counter_ball++ ){ //<核心> // (sumOfGrid - 1)为钉板的层数 for( int times = 1;
times <= ( sumOfGrid - 1 );
times++ ){ rand = (int)( Math.random()*2 ); number += rand; } grid[number]++; number = 0; //核心> } //输出结果 System.out.println( "小球的总数为"+sumOfBall+
"\t格子的个数为"+sumOfGrid ); for( int index = 0; index < grid.length;
index++ ){ System.out.println( (index+1)+
"号格子中的小球数为:\t"+grid[index] ); }
}//end of metod galton
|
2008-08-07 用 python 实现
def galton(sumOfGrid, sumOfBall):
"""
@author: libin
@param sumOfGrid: 格子的数量
@type sumOfGrid: int
@param sumOfBall: 投入的小球总数
@type sumOfBall: int
@return: 每个格子中小球的数量
@rtype: list
"""
#将每个格子中小球数清为0
g = [0 for i in range(sumOfGrid)]
#计算钉子的层数
b = sumOfGrid - 1
#计算模型
for t in range(sumOfBall):
#获取一个随机向量 a. sum(a) 为小球的偏移量
a = [random.choice([0,1]) for i in range(b)]
#偏移量为0的小球落入0号格子, 为1的落入1号格子 ...
g[sum(a)] += 1
#返回每个格子中小球数
return g
|
运行结果:
格子数量: 5
投入的小球数: 1000000 (1百万)
耗时: 11.7970001698 秒
计算结果: [62272, 249918, 374495, 250441, 62874]
格子数量: 5
投入的小球数: 10000000 (1千万)
耗时: 115.937999964 秒
计算结果: [624722, 2501694, 3750013, 2499684, 623887]
阅读(9508) | 评论(5) | 转发(0) |