PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallszahlen mit Wahrscheinlichkeiten


Janus
24.08.2005, 20:56
Hallo...kapier eine Angabe nicht...

Ein Zufallszahlengenerator soll Zahlen von 1 bis n erzeugen, wobei für jede Zahl eine unterschiedliche Wahrscheinlichkeit gilt. Die Wahrscheinlichkeiten und der Maximalwert n sollen durch den einmaligen Aufruf eines Algorithmus
initRandom(int n,int probabilities[1:n])
festgelegt werden. Nach erfolgter Initialisierung sollen Zufallszahlen durch wiederholten Aufruf eines Algorithmus int genRandom() erzeugt werden können.

Was soll diese Angabe bedeuten? Soll dass heißen dass eine Zufallszahl aufgerufen wird aber nur mit einer bestimmten Wahrscheinlichkeit?
Bsp.: n= 5
Also als Zufallszahlen kommen 0,1,2,3,4 in Frage
Wenn bsp.: 0.....20%
1.....30%
2.....20%
3.....10%
4.....20%

..im Array angegeben wird.
Wie schaut hierbei ein Aufruf aus?

mfg,
Janus


Jan Krüger
24.08.2005, 21:05
Ich nehme an, dass dein Aufruf von genRandom() halt bei den Beispielvorgaben in 20% der Fälle 0 zurückgibt usw.
Tipp zur Implementierung: erzeuge eine Zufallszahl von 0-100. Liegt sie in [0, 20) (die 20% aus dem Beispiel), gib 0 zurück usw.

Torsten Arlt
25.08.2005, 17:13
Ich würde vermuten, dass Du die Wahrscheinlich des Auftretens einer Zahl im Generator festlegen kannst.
(Wäre ne schöne kniffelige Aufgabe...):

1 : soll mit einer Wahrscheinlichkeit von 30% auftreten
2 : "" 20 % "
3 : 10
...

D.h. die 2 soll doppelt so oft vorkommen, wie die 3 und die 1 dreimal so viel, wie die 3....

:: Bei einem normalen ZGenerator kommen alle Zahlen gleich häufig vor....bei Deinem (anscheinend) dann nicht

Janus
02.09.2005, 11:26
Hallo...danke habs gelöst..

mfg,
Janus

Cyberpuer
02.09.2005, 22:40
Wärst du so nett deine Lösung für die letzen Nutzer der Suchfunktion zu veröffentlichen?

Janus
03.09.2005, 12:49
OK hier ist sie:



initRandom(int n, int probabilities[1:n]){
int index = 1
for(int i = 1....pr.length){
for(int j = index...pr[i]+(index-1)){
prob_list[j] = pr[i]
}
index = index+pr[i]
}
return genRandom()
}

int genRandom(){
return prob_list[smallRand(1000+1)
}



mfg,
Janus