A distribuição de Pareto é uma distribuição de probabilidade que surge muito na natureza. Possui muitas propriedades especiais, como uma média infinita. Neste desafio, você produzirá um número amostrado dessa distribuição.
A Distribuição de Pareto é definida como maior ou igual a x
com probabilidade 1/x
, para todos x
maiores ou iguais a 1.
Portanto, um número amostrado dessa distribuição é maior ou igual a 1 com probabilidade 1, maior ou igual a 2 com probabilidade exatamente 1/2, maior ou igual a 3 com probabilidade exatamente 1/3, maior ou igual a 11.4 com probabilidade exatamente 1/11.4, e assim por diante.
Como você fará uma amostra dessa distribuição, seu programa ou função não receberá nenhuma entrada e emitirá um número aleatório, com as probabilidades acima. No entanto, se o seu programa não corresponder perfeitamente às probabilidades acima devido à impressão de ponto flutuante, tudo bem. Veja o final do desafio para mais detalhes.
(Isso é chamado de Distribuição de Pareto com alfa 1 e limite inferior 1, para ser exato)
Aqui estão 10 exemplos desta distribuição:
1.1540029602790338
52.86156818209856
3.003306506971116
1.4875532217142287
1.3604286212876546
57.5263129600285
1.3139866916055676
20.25125817471419
2.8105749663695208
1.1528212409680156
Observe como 5 deles estão abaixo de 2 e 5 estão acima de 2. Como esse é o resultado médio, poderia ter sido maior ou menor, é claro.
Sua resposta só precisa estar correta até os limites do seu tipo de ponto flutuante, número real ou qualquer outra coisa que você usar, mas você deve ser capaz de representar números com pelo menos três dígitos decimais de precisão e representar até 1.000.000 . Se você não tiver certeza se algo está bem, não hesite em perguntar.
Isso é código de golfe.
Detalhes sobre imprecisão:
Para cada intervalo
[a, b]
, onde1 <= a < b
a probabilidade ideal de que a amostra caia nesse intervalo1/a - 1/b
. A probabilidade de seu programa produzir um número nesse intervalo deve estar com0.001
de1/a - 1/b
. SeX
é a saída do seu programa, é necessário isso|P(a <= X <= b) - (1/a - 1/b)| < 0.001
.Observe que, ao aplicar a regra acima com
a=1
eb
suficientemente grande, é possível que seu programa produza um número maior ou igual a 1 com pelo menos probabilidade 0,999. O resto do tempo pode travar, gerar saídaInfinity
ou fazer o que mais.
Estou bastante certo de que os envios existentes do formulário 1/1-x
ou 1/x
, onde x
há uma flutuação aleatória no [0, 1)
ou(0, 1)
ou [0, 1]
, todos atendem a esse requisito.