the probability of returning one element should be val of num / total vals

Class weightedOutput{
    Random rand;
    public int probOutput(int[] array){
        // prefix 
        int[] prefix = new int[array.length + 1];
        prefix[0] = 0;
        for(int i = 1; i < array.length; i++){
            prefix[i] = prefix[i - 1] + array[i - 1];
        }
        int rand = rand.nextInt(prefix[prefix.length - 1]);
        int res = binarySearch (prefix, rand); // index of 9 
        return array[res - 1];
        }
    }
    private  binarySearch(int[] prefix, int rand){
        int start = 0;
        int end = prefix.length;
        while(start < end - 1){
            int mid = start + (end - start) / 2;
            if(prefix[mid] == rand){
                return mid;
            }else if(prefix[mid] < rand){
                start = mid; 
            }else{
                end = mid;
        }
        if (prefix[start] <= rand) {
            return start;
        }
        return end;
}

[1, 2, 6, 7]

the probability of returning one element should be val of num / total vals

 

1, 2

1 1/16

2 2/16

猜你喜欢

转载自www.cnblogs.com/tobeabetterpig/p/9616628.html
num
val