Ajuda lógica para um método

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

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

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%?

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.

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.

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

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.

/**
*  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;
}

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 =)

[quote=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 =)[/quote]

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.

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 =)

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.

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?

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