Wir wissen, dass die klassische Bereichs-Zufallsfunktion wie folgt aussieht:
public static final int random(final int min, final int max) {
Random rand = new Random();
return min + rand.nextInt(max - min + 1); // +1 für die Einbeziehung des Maximums
}
Ich möchte einen Algorithmus erstellen, um eine Zahl im Bereich von 1..10 zufällig zu generieren, aber mit ungleichen Wahrscheinlichkeiten wie folgt:
1) 1,2,3 -> 3/6 (1/2)
2) 4,5,6,7 -> 1/6
3) 8,9,10 -> 2/6 (1/3)
Dies bedeutet, dass die Funktion eine 1/2-Chance hat, eine Zahl zwischen 1 und 3 zurückzugeben, eine 1/6-Chance, eine Zahl zwischen 4 und 7 zurückzugeben, und eine 1/3-Chance, eine Zahl zwischen 8 und 10 zurückzugeben.
Weiß jemand den Algorithmus?
UPDATE:
Eigentlich dient der Bereich von 1..10 nur als Beispiel. Die Funktion, die ich erstellen möchte, würde für beliebige Zahlenbereiche gelten, wie z.B. 1..10000, aber die Regel bleibt dieselbe: 3/6 für den oberen Bereich (30% Anteil), 1/6 für den mittleren Bereich (nächste 40% Anteil) und 2/6 für den unteren Bereich (letzten 30% Anteil).