Wie kann ich in Java am sinnvollsten eine Funktion für Wahrscheinlichkeiten schreiben. Also Prozentuale Chance das ein Ereignis ausgelöst wird?

... komplette Frage anzeigen

3 Antworten

Denk nochmal drüber nach. In deinem Beispiel kommt die Ausgabe 3% Chance nur in 1% der Fälle, nämlich dann wenn 0,02 <= d < 0,03 ist.

Wenn du die else weglässt wird's richtig(er), aber dann können auch mehrere Ereignisse gleichzeitig auftreten.

Schließen sich die Ereignisse gegenseitig aus?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Schachpapa
20.07.2016, 18:10

Nein, weglassen der else tut's nicht, dann findet bei B immer auch A und bei C immer auch B und A statt.

Also dann eher so:

 if (d < 0.001){
System.out.print("0.1% chance!");
} else if (d < 0.001+0.02){
System.out.print("2% chance!");
} else if (d < 0.001+0.02+0.03){
System.out.print("3% chance!");
} else if (d < 0.001+0.02+0.03+0.9){
System.out.print("90% chance!");
}
0

Nur die Chancen variabel?

Textdatei: 1,2,3,5 (alle Angaben in %)

Diese Datei Parsen und zB in ein Array schreiben und schon durch 100 teilen.
Dann halt 



double d = Math.random();
if (d <= array[0]){
System.out.print("0.1% chance!");
} else if (array[0] < d && d <= array[1]){
System.out.print("2% chance!");
} else if (array[1] < d && d <= array[2]){
System.out.print("3% chance!");
} else if (array[2] < d && d <= array[3]){
System.out.print("90% chance!");
}



Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Xearox
20.07.2016, 17:51

Ich versuchs mal =) Danke dir erstmal.

0

Schau mal hier:

https://github.com/pheek/WalkerCategories

Die Lösung mit "if/else if/else if/else if/...." kann bei vielen Prozentzahlen sehr unperfomant werden. Nehmen wir an, Du hast 10 Kategorien, dann musst Du im Schnitt fünf Vergleiche anstellen. Mit dem Algorithmus von Walker (s. Knuth «The art of Computer Programming» Band II) aus dem Jahre 1977 braucht es im Wesentlichen gerade mal eine Multiplikation, ein Vergleich und ein Nachschlagen im Array, egal wie viele Kategorien an Prozentzahlen Du verwendest! Das Beispiel (obiger Link, dann "Example.java" zeigt, wie die Klasse WalkerCategories angewendet werden kann.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Schachpapa
26.07.2016, 12:32

Das ist ja eine feine Sache. Muss ich mir mal näher anschauen.

0

Was möchtest Du wissen?