Java tutorial
import java.util.Random; /** * BeehiveZ is a business process model and instance management system. * Copyright (C) 2011 * Institute of Information System and Engineering, School of Software, Tsinghua University, * Beijing, China * * Contact: jintao05@gmail.com * * This program is a free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation with the version of 2. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** * @author Tao Jin * */ public class Util { // calculate the binomial distribution // ret[0] stores the number user given // ret[1] stores the count of the corresponding number in ret[0] with the // same index // for some number, the count maybe 0. // the parameter validation must be finished in advance public static long[][] getBinomialDistribution(int min, int max, long total) { Random rand = new Random(System.currentTimeMillis()); int n = max - min; long[][] ret = new long[2][n + 1]; int mean = (n + 1) / 2; float p = 1; if (n > 0) { p = (float) mean / (float) n; } long count = 0; for (int i = 0; i <= n; i++) { double p_i = combination(n, i) * Math.pow(p, i) * Math.pow((1 - p), (n - i)); long count_i = (long) (total * p_i); ret[0][i] = i + min; ret[1][i] = count_i; count += count_i; } while (count < total) { int i = rand.nextInt(n + 1); ret[1][i]++; count++; } return ret; } // calculate the combination // the value would be very large, so store it in the type of double public static double combination(int n, int k) { double ret = 1; while (k > 0) { ret = ret * ((double) n / (double) k); k--; n--; } return ret; } }