Andreas Pflug: Gewichtete zufällige Auswahl

Beitrag lesen

// Nun ein Beispiel zur gewichteten Selektierung:

double r = random();  // Zufallszahl zw. 0 und 1
int i=0;
while(r>A2[i]) ++i;
int iselected = i;

Es fiel woanders im Thread noch das Stichwort
'Binäre Suche'. Diese könnte man
hier wie folgt realisieren (in Pseudo-Code):

  
double r=random();  
int    i=0, imin=0, imax=length-1;  
while(imax-imin>1) {  
  i = imin + (imax-imin)/2; // wird automatisch gerundet, da vom Typ 'int'  
  if (r>A2[i]) { imin=i; } else { imax=i; }  
}  
int iselected = r>A2[imin] ? imax : imin;  

Das sollte auch bei 1 Mio Elementen noch ausreichend schnell sein
und die 8 MB für das Gewichtungs-Array sollten auch noch
über sein... ;-)

MfG

Andreas