Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Zufallsgenerator mit vorgegebener Häufigkeit?

  Alt 7. Aug 2007, 21:48
Hi Rene,

interessante Frage, mal schauen.

Ich würde die Zahlen 1 bis 20 als eine Zahlengerade betrachten deren Abstände zwichen den Zahlen die prozentuale Gewichtung darstellt. Dann schaust du in welchem Bereich auf dieser Geraden du landest und nimmst die Zahl zu diesem Bereich als Resulat.

Also wenn man in Prozent rechnet dann würde die Summe der Gewichtungen der Zahlen von 1 bis 20 ja 100 ergeben. Wir ziehen nun mit Random(100) eine Zahl zwischen 0 bis 99 und schauen auf unsere Gewichtete Zahlengeraden in welchem Bereich wir liegen.

Das könnte so aussehen:

Delphi-Quellcode:

function RandomVerteilung(const Verteilung: array of Cardinal): Integer;
var
  I,J: Integer;
begin
  J := 0;
  for I := Low(Verteilung) to High(Verteilung) do
    Inc(J, Verteilung[I]);

  J := Random(J);
  I := Low(Verteilung);
  while (J > 0) and (I <= High(Verteilung)) do
  begin
    Dec(J, Verteilung[I]);
    Inc(I);
  end;
  Result := I;
end;
Angenommen wir möchten aus die Zahlen 1 bis 5 mit folgenden Wahrscheinlichkeiten haben

1 = 10%
2 = 20%
3 = 40%
4 = 10%
5 = 20%

dann benutzen wir obige Funktion so

Result := RandomVerteilung([10,20,40,10,20]) +1; Unsere Zahlengerade sähe so aus

1 -> 0 bis 9
2 -> 10 bis 29
3 -> 30 bis 69
4 -> 70 bis 79
5 -> 80 bis 99

Gruß Hagen
  Mit Zitat antworten Zitat