package com.interview.books.svinterview; import java.util.Random; /** * Created_By: stefanie * Date: 14-12-8 * Time: 下午10:20 */ public class SV23_ProbabilityRandomGenerator { int[] P; int[] Q; int sum; Random random = new Random(); public SV23_ProbabilityRandomGenerator(int[] P){ this.P = P; this.Q = new int[this.P.length]; sum = 0; for(int i = 0; i < P.length; i++){ sum += P[i]; Q[i] = sum; } } private int find(int number){ int low = 0; int high = Q.length - 1; while(low < high){ int mid = low + (high - low)/2; if(number <= Q[mid]) high = mid; else low = mid + 1; } return low; } public int random(){ int rand = random.nextInt(sum) + 1; int offset = find(rand); return offset; } public static void main(String[] args){ int[] pro = new int[]{1,5,3,2,4}; //Q = [1,6,8,10,14] SV23_ProbabilityRandomGenerator generator = new SV23_ProbabilityRandomGenerator(pro); double[] marker = new double[5]; for(int i = 0; i < 1000; i++){ int rand = generator.random(); marker[rand]++; } for(int i = 0; i < marker.length; i++) { System.out.println(marker[i] / 1000); } } }