Werte mit gegebener Wahrscheinlichkeit selektieren

bingoTop

Mitglied
Hallo,

ich benötige mal wieder Hilfe, stehe seid Stunden auf dem Schlauch.

Ich habe eine Liste gegeben mit Strings und dazugehörigen Wahrscheinlichkeiten:

URL1, 50%
URL2, 30%
URL3, 20%


Ich möchte nun eine Methode getEntry() implementieren, die mir bei 100 Aufrufen, den ersten Eintrag mit einer Wahrscheinlichkeit von 50 den 2. Eintrag mit 30 und den 3. Eintrag mit einer Wahrscheinlichkeit von 20 zurückgibt.

Weiß jetzt nicht wie ich von einem Math.Random-Wert auf einen entsprechenden Listeintrag komme, bei dem die gegebene Wahrscheinlichkeit beachtet wird.
Habe überlegt die Liste zu erweitern und den 1. Wert z.B. 50x abzulegen, dass find ich aber sehr unsauber.

Über kreative Ideen würde ich mich sehr freuen!
 

Marco13

Top Contributor
Man könnte sowas machen wie
Java:
Random random = new Random(0);
double d = random.nextDouble();
if (d <= 0.5        ) return URL1;
if (d <= 0.5+0.3    ) return URL2;
if (d <= 0.5+0.3+0.2) return URL3;

Aber das ist natürlich unpraktikabel und murksig wenn es um mehrere Einträge geht. Deswegen ein spontaner Gedanke: Eine TreeMap, die
0.5 -> URL1
0.5+0.3 -> URL2
0.5+0.3+0.2 -> URL3
abbildet, und von der man sich dann mit map.ceilingEntry(d) den Wert für das Intervall abholt, wo 'd' drin gelandet ist.
 

Marco13

Top Contributor
Peinlich ... da implementiert man sowas mal aus und erinnert sich im entscheidenden Moment nicht mehr dran... (wollte schon ewig mal eine "Snippet-Sammlung" erstellen, durchsuchbar mit Stichworten und allem... :reflect: )
 

Ähnliche Java Themen

Neue Themen


Oben