Mam problemy z generowaniem liczb losowych, które nie są zgodne z jednolitą dystrybucją dyskretną.Liczby losowe na podstawie prawdopodobieństwa
Załóżmy na przykład, że mam 5 liczb (aby zachować prostotę), prawdopodobieństwo wygenerowania liczby k będzie k/15. (K = 1 do 5)
Mój pomysł jest generowanie liczb losowych j użyciem rand(), a jeżeli ta liczba j jest:
1 => następnie numer 1 jest generowany
2 lub 3 => Num 2
4 lub 5 lub 6 => Num 3
7 lub 8 lub 9 lub 10 => Nr 4
11 lub 12 lub 13 lub 14 lub 15 => ilość 5
Teraz zmień skalę, aby wygenerować 1-10, 1-100, 1-1000. Czy to działa tak, jak zamierzam? Skonstruowałem pętlę, która robi to prawie za każdym razem, gdy trzeba wygenerować liczbę, myślę, że to prawdopodobnie nieefektywne, ponieważ rośnie aż do znalezienia liczby j wygenerowanej w jednym z zakresów ... Jaki mógłby być lepszy sposób to zrobić?
EDYCJA: A może po prostu utworzyć tablicę z odpowiednimi numerami, a następnie wyciągnąć z lepszego rozwiązania rand()?
Istnieje wiele podobnych pytań na temat SO ..... –
http://www.cplusplus.com/reference/random/discrete_distribution/discrete_distribution/ –
powiązane http://stackoverflow.com/questions/9432226/how- do-i-select-a-range-of-values-in-a-switch-statement –