Hallo!
Ich habe ein total simples Problem (logisch, nicht technisch) und komme gerade nicht auf die Lösung. Das mag daran liegen, dass ich heute schon viel zu lange vor einem Projekt sitze und bei den simpelsten Dingen den Wald vor lauter Bäumen nicht mehr sehe.
Ich habe drei Kategorien, nennen wir sie A, B und C.
Dann habe ich eine Methode, nennen wir sie "Kategorieauslosung". Diese soll mir bei einem Aufruf entweder A, B oder C zurückgeben.
Welche der drei Kategorien ausgelost wird, soll von Wahrscheinlichkeiten abhängen. Deshalb hat die Methode 3 Übergabeparameter namens AnteilA, AnteilB, AnteilC.
Beispielwerte für die Parameter: AnteilA = 5; AnteilB = 2; AnteilC = 7;
Dies würde bedeuten, dass mit die Auslosungs-Methode in 35,7% aller Fälle A, in 14,3% aller Fälle B und in 50% aller Fälle C zurückgeben sollte (im Mittel natürlich). Zur Verfügung steht in der Methode ein Zufallsgenerator, welcher gleichverteilte Werte im Intervall [0,1) zurückliefert.
In meienr Müdigkeit kam gerade folgendes heraus (pseudocode):
Das funktioniert, aber natürlich nur, solange AnteilA < AnteilB < AnteilC.
Wie geht es besser?
Danke.
Ich habe ein total simples Problem (logisch, nicht technisch) und komme gerade nicht auf die Lösung. Das mag daran liegen, dass ich heute schon viel zu lange vor einem Projekt sitze und bei den simpelsten Dingen den Wald vor lauter Bäumen nicht mehr sehe.
Ich habe drei Kategorien, nennen wir sie A, B und C.
Dann habe ich eine Methode, nennen wir sie "Kategorieauslosung". Diese soll mir bei einem Aufruf entweder A, B oder C zurückgeben.
Welche der drei Kategorien ausgelost wird, soll von Wahrscheinlichkeiten abhängen. Deshalb hat die Methode 3 Übergabeparameter namens AnteilA, AnteilB, AnteilC.
Beispielwerte für die Parameter: AnteilA = 5; AnteilB = 2; AnteilC = 7;
Dies würde bedeuten, dass mit die Auslosungs-Methode in 35,7% aller Fälle A, in 14,3% aller Fälle B und in 50% aller Fälle C zurückgeben sollte (im Mittel natürlich). Zur Verfügung steht in der Methode ein Zufallsgenerator, welcher gleichverteilte Werte im Intervall [0,1) zurückliefert.
In meienr Müdigkeit kam gerade folgendes heraus (pseudocode):
Code:
Kategorie Kategorieauslosung(AnteilA, AnteilB, AnteilC)
{
total = AnteilA + AnteilB + AnteilC;
AnteilAProzent = (1 / total) * AnteilA;
AnteilBProzent = AnteilAProzent + (1 / total) * AnteilB;
zufall = random.next();
if zufall <= AnteilAProzent
{
return A;
}
else if zufall <= AnteilBProzent
{
return B;
}
else
{
return C;
}
}
Das funktioniert, aber natürlich nur, solange AnteilA < AnteilB < AnteilC.
Wie geht es besser?
Danke.