Ajuda lógica para um método

13 respostas
Polimorphism

Novamente olá a todos!
A Minha dúvida aqui nem é bem de java, mais como não sei bem onde procurar, resolvi postar aqui mesmo.
Se alguem souber me direcionar para algum outro lugar, por favor poste! =)

Prescisei fazer isto porque no meu programa iria utilizar MUITAS vezes os métodos da classe Random, e isso estava deixando o programa lerdo.

A função recebe um int “x”, que significa a “quantidade” de números aleatórios, e um double “y” ( entre 0 e 1 ).
Ela deve retonar a chance, em % de que a média entre x números aleatórios ( entre 0 e 1 ) seja [color=red]menor[/color] que y.

Vou escrever os seguintes exemplos pra ficar mais fácil:

Se x for 2, e y for 1( 100% ), o valor retornado será 1, já que há 100% de chance de média entre 2 números aleatórios ser menor que 1.

Se x for 2, e y for 0.5( 50% ), o valor retornado será 0.5, já que há 50% de chance da média entre 2 números aleatórios ser menor que 0.5.

Se x for 2, e y for 0.875( 87,5% ), o valor retornado seria 0,75, já que há 87,5% de chance de que a média dos dois números aleatórios seja menor que 0,75.

Não sei bem se deu pre entender, mais é isso. Vlw a todos, já tentei usar algo como:

return ((( 2 * y - 1 ) ^ x ) + 1 ) / 2

Mais não é isso. Porém acho que isso possa ajudar, afinal =)
Obrigado! =)´
[]`s

13 Respostas

Polimorphism

Alguém está tentando? Eu naum consigo d jeito nenhum =(

felipepagliuco

Cara to tentando resolver, verifica isso:

Nesse primeiro exemplo que você citou, pelo que estou entendendo existem 2 números aleatórios entre [0,1](isso num intervalo fechado) e tem que verificar a porcentagem de números maior que 1, então é por exemplo fazendo a media de 0,1+0,7/2 = 0,4 ou 0,8 + 0,9/2 = 0,85. Ai você colocou como resposta 100% de os números aleatórios serem menores que 1 ate ai ok, mais você não quer saber a porcentagem de números que é maior que 1 nesse caso por exemplo ai não seria 0%?

Polimorphism

Ah, me desculpe, Tinha que escrever ao contrário!
Ela deve retonar a chance, em % de que a média entre x números aleatórios ( entre 0 e 1 ) seja [color=red]menor[/color] que y.

Polimorphism

To indo aos poucos aqui =). Esse código funciona somente com x = 2

static double function( int x, double y ){
  return (  ( y - 1 / x ) *  x > 0 ? y + ( 1 - y ) * ( y - 1 / x ) *
      x  :  ( 1 - y ) * ( y - 1 / x ) *  x - ( 1 - y ) * ( y - 1 / x ) *
      x  + ( y - 1 / x ) *  x  );
}

ou

static double function( int x, double y ){
    double e = ( y - 1 / x ) *  x;
    double f =  ( 1 - y ) * e;
    return ( e > 0 ? y + f ;  y - f + e );
}

to tentando adaptar pra funcionar com outros valores de x.

Polimorphism

Eu postei minha dúvida em um fórum de matemática… Estão tentando descobrir, obrigado =)

felipepagliuco

Então estou até tentando fazer aqui como um desafio, está meio complicado porque você tem que ter um algoritmo que gera todas as combinações possíveis entre os números e posteriormente realizar as operações necessárias pelo menos foi como eu analisei. Mais vê la o que eles te dizem nos vamos ajudando aqui.

B
/**
*  Média da chance de x números aleatórios entre 0 e 1 serem menores que y
* 
* @param x número de aleatórios
* @param y valor a ser menor
* @return valor da média em porcentagem
*/
public double media(int x, double y) {
  return y * 100;
}
Polimorphism

Me desculpe, acho que vc não conseguiram entender a minha dúvida. Eu estava prescisando que retornasse a probabilidade que a média entre x números aleatórios fosse menor que y. Exemplo, se x for 5, e y for 0,7, ele deve retornar a porcentagem de chance de que

( nextDouble() + nextDouble() + nextDouble() + nextDouble() + nextDouble() ) / 5 seja menor que 0,7.
Obrigado =)

B

Polimorphism:
Me desculpe, acho que vc não conseguiram entender a minha dúvida. Eu estava prescisando que retornasse a probabilidade que a média entre x números aleatórios fosse menor que y. Exemplo, se x for 5, e y for 0,7, ele deve retornar a porcentagem de chance de que

( nextDouble() + nextDouble() + nextDouble() + nextDouble() + nextDouble() ) / 5 seja menor que 0,7.
Obrigado =)

Acho que você que não está conseguindo entender como funciona probabilidade e estatística.

A probabilidade de 5 números aleatórios entre 0 e 1 darem um número menor que 0,7 é 0,7. Se esses 70% dos casos vão acontecer, aí são outros 500.

Probabilidade não é uma conta baseada em amostragem.

Polimorphism

Isso funciona quando x = 1. Você está pensando como

( X * nextDouble() ) / X

O fato é que quando x aumenta, a média entre x números aleatórios fica cada vez mais próxima de 0,5.
Se vc usar ( nextDouble() + nextDouble() ) / 2, perceberá que os valores, por exemplo, aparecem 75% das vezes entre 0.25 e 0.75.
Isso usa a mesma lei que diz que se vc somar o resultado de dois dados, verá que cairá muito mais vezes 7 do que 12.

Obrigado a todos =)

T

Sua dúvida na verdade é de matemática.

http://mathworld.wolfram.com/UniformSumDistribution.html

Se você estiver fazendo um curso de Matemática, irá entender ao que eu estou me referindo.

(Basicamente, você tem de determinar a integral definida (de 0 até y/x) da função P (x).

Você pode tentar estimar o tal número por Monte Carlo, como você tentou fazer, o que funciona bem para valores não muito grandes de x.

Se x for maior que 12, pode ser aproximado pela distribuição normal.

Polimorphism

Ok, obrigado, é exatamente isso que eu estava prescisando… só que não tenho como fazer, sem chance alguma. Eu estou no 9º ano não vou conseguir mexer com todas essas integrais… alguem pode me ajudar?

Polimorphism

Hmm… Minha irmã faz engenharia. Acho que ela me ajuda =)

Criado 22 de setembro de 2009
Ultima resposta 27 de set. de 2009
Respostas 13
Participantes 4