Ich habe Probleme beim Erzeugen von Zufallszahlen, die keiner diskreten Gleichverteilung folgen.Zufallszahlen basierend auf einer Wahrscheinlichkeit
Also sagen wir zum Beispiel, dass ich 5 Nummern habe (um es einfach zu halten), eine Wahrscheinlichkeit, dass die Zahl k erzeugt wird, wäre k/15. (K = 1 bis 5)
Meine Idee ist, eine Zufallszahl J mit Hilfe rand() zu erzeugen, und wenn diese Zahl j ist:
1 => dann Nummer 1 erzeugt
2 oder 3 => num 2
4 oder 5 oder 6 => num 3
7 oder 8 oder 9 oder 10 => num 4
11 oder 12 oder 13 oder 14 oder 15 => num 5
Skalieren Sie dies nun auf 1-10, 1-100, 1-1000. Funktioniert das so, wie ich es mir vorstelle? Ich habe eine Schleife konstruiert, die das jedes Mal, wenn eine Zahl generiert werden muss, ziemlich genau macht. Ich denke, dass sie wahrscheinlich ineffizient ist, da sie weitergeht, bis sie die j-Nummer in einem der Bereiche findet ... Was könnte ein besserer Weg sein um dies zu tun?
EDIT: oder vielleicht ein Array einmal mit den richtigen Zahlen erstellen und dann mit Rand ziehen() bessere Lösung?
Es gibt viele ähnliche Fragen zu SO ..... –
http://www.cplusplus.com/reference/random/discrete_distribution/discrete_distribution/ –
related http://stackoverflow.com/questions/9432226/how- do-i-select-ein-Wertebereich-in-einem-Schalter-Anweisung –