Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Losowanie liczb, % szans.

Ostatnio zmodyfikowano 2016-03-17 16:12
Autor Wiadomość
Harion
Temat założony przez niniejszego użytkownika
Losowanie liczb, % szans.
» 2016-03-17 15:08:54
Witam takie pytanie jak najprościej można zrobić losowanie liczb ale nie chodzi tu o zwykłe rand tylko co coś w tym stylu.

Mam np tablice 20 elementów, każdy z nich ma szanse na wylosowanie podaną w % od 0 do 100.
Najpierw myślałem żeby losować liczbę od 0 do 100 i każdy z elementów miałby jakiś swój przedział liczb np 0-10, 11-15 itp,
lecz wtedy jeśli np kilka elementów miało by szanse na wylosowanie 70% to moja teoria nie miała by zbytniego sensu.

Jakiś pomysł? Ew jakieś źródło informacji gdzie mógłbym zasięgnąć pomocy?
P-146132
Monika90
» 2016-03-17 16:12:51
W bibliotece standardowej C++ i w bibliotece boost jest discrete_distribution które robi to co chcesz.


jeśli np kilka elementów miało by szanse na wylosowanie 70% to moja teoria nie miała by zbytniego sensu.

Jeżeli kilka elementów miałoby mieć prawdopodobieństwo 70% to by nie miała sensu, bo prawdopodobieństwa wyrażone w procentach muszą się sumować do 100%. Ale w ogóle Twoja metoda ma sens, nawet wtedy gdy kilka elementów ma mieć takie samo prawdopodobieństwo.

Zaawansowanym sposobem rozwiązania tego problemu jest tzw. metoda aliasów, ale często da się użyć czegoś prostszego, np. wyobraź sobie że masz tablicę o rozmiarze 15, wypełnioną takimi liczbami

0 0 0 0 0 1 1 1 1 1 2 2 3 4 4

i teraz losujesz sobie indeks z przedziału od 0 do 14 i patrzysz co jest w tablicy pod tym indeksem, będziesz trafiał na 0 z prawdopodobieństwem 1/3, tak samo na 1, na 2 lub 4 z prawdopodobieństwem 2/15, a na 3 z 1/15.

Dobierając odpowiednio rozmiar tablicy i jej zawartość można losować elementy z prawdopodobieństwami, które są liczbami wymiernymi.
P-146135
« 1 »
  Strona 1 z 1