Düzgün olmayan dağılım ile rastgele değerler

0 Cevap php

Ben düzgün olmayan dağılımı ile bir rasgele sayı üreteci, yani istiyorum:

// prints 0 with 0.1 probability, and 1 with 0.9 probability
echo probRandom(array(10, 90));

Bu şu anda ne var:

/**
 * method to generated a *not uniformly* random index
 *
 * @param array $probs int array with weights 
 * @return int a random index in $probs
 */
function probRandom($probs) {
    $size = count($probs);

    // construct probability vector
    $prob_vector = array();
    $ptr = 0;
    for ($i=0; $i<$size; $i++) {
        $ptr += $probs[$i]; 
        $prob_vector[$i] = $ptr;
    }

    // get a random number
    $rand = rand(0, $ptr);
    for ($i=0, $ret = false; $ret === false; $i++) {
        if ($rand <= $prob_vector[$i])
            return $i;
    }   
}

Herkes daha iyi bir yol düşünebiliyor musunuz? Muhtemelen bir ön-işleme yapmamı gerektirmez mi?

0 Cevap