package com.spbsu.bernulli; import com.spbsu.commons.random.FastRandom; import java.util.Arrays; /** * User: Noxoomo * Date: 20.03.15 * Time: 15:26 */ public class Multinomial { private final double[] cum; private final FastRandom rand; public Multinomial(FastRandom rand, double[] q) { this.rand = rand; cum = new double[q.length]; cum[0] = 0; for (int i = 1; i < q.length; ++i) { cum[i] = cum[i - 1] + q[i - 1]; } } public int next() { final double coin = rand.nextDouble(); return Math.abs(Arrays.binarySearch(cum, coin)) - 2; } }