Ajuda com probabilidade!

3 respostas
D

Tenho 2 registros no banco:

[Nome - Valor] Uva - 431 Pera - 231

Preciso pegar 1 deles, randomicamente, levando em consideração q o item com maior valor, aparece menos.

Cada vez q um for escolhido, seu valor acrescenta 1.
Posso ter n itens com Valores bem altos (ex.: 1.857.421).

Não importa a linguagem, to apanhando da lógica.
Alguma luz? Alguém?

Valeus…

3 Respostas

V

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

D

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

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.

Criado 27 de abril de 2004
Ultima resposta 29 de abr. de 2004
Respostas 3
Participantes 3