Vegetto 27 de abr. de 2004
imaginei uma solução cabeção aqui, com certeza não é a melhor, mais funciona “bem” para uma quantidade não muito grande de registros
soma todos os valores que aparecem no seu banco de dados
gera um numero entre zero e esse valor
seta uma variavel limiar pra 0
[loop infinito]
limiar recebe limiar mais o valor do registro atual
se o valor de limiar for maior que o valor gerado randomicamente, sai do loop e retorna esse item
move pro proximo registro
[/loop]
adciona um ao valor do item escolhido
não sei se ficou claro, qualquer coisa só falar
[]´s
dcoder 27 de abr. de 2004
Consegui!!! :D
Não sei se interessa, pois esta em PHP, mas de qq forma o código ficou assim!
Sugestões são bem vindas!
function calculateProb ( $ n = array ()) {
srand (( float ) microtime () * 10000000 );
$ key = array_rand ( $ n , 1 );
$ this -> choosed = $ n [ $ key ];
}
function selectMedia ( $ mid = 0 , $ type = "" ) {
global $ db ;
$ media = array ();
$ last_val = 0 ;
$ rs = & $ db -> Execute ( "$SQL" );
while (! $ rs -> EOF ) {
$ last_val = (! $ last_val ) ? $ rs -> fields ( ' views ' ) : $ last_val ;
for ( $ i = 1 ; $ i <= ( ceil ( $ last_val / $ rs -> fields ( ' views ' ))); $ i ++ ) {
$ media [] = $ rs -> fields ( ' id ' );
}
$ rs -> MoveNext ();
}
$ this -> calculateProb ( $ media );
return $ this -> choosed ;
}
Valeu ai!
[]'s
Operador_Nabla 29 de abr. de 2004
Meu professor já dizia:
A idéia para fazer com que o computador execute determinada tarefa com determinada probabilidade é essa mesma: Se a probabilidade em questão é p , com 0 <= p <= 1 , lance um número aleatório x , uniformemente distribuído entre 0 e 1, e faça o que você quiser fazer se x <= p , pois a probabilidade de se obter x <= p vale p .
Na prática (e na teoria também), não faz muita diferença testar a cláusula x <= p ou a cláusula x < p .