phpbar.de logo

Mailinglisten-Archive

[php] Re: randomize?

[php] Re: randomize?

Martin Ramsch m.ramsch_(at)_computer.org
Thu, 7 Oct 1999 09:36:55 +0200


Werner Stürenburg schrieb am Donnerstag, den  7. Oktober 1999:
> Martin Ramsch am 22 Sep 1999:
> > Stephan Noller schrieb am Dienstag, den 21. September 1999:
> > > ich moechte eine Reihe von 20 Zahlen per Zufall sortieren. (Also 20x
> > > ziehen ohne zuruecklegen).
> 
> >   $z = array(1,2,3,5,8,13,21);
> > 
> > Falls Du eine PHP-Version hast, die noch nicht die Funktion shuffle()
> > bietet, könntest Du so vorgehen:
> > 
> >   $n = count($z);
> >   $i = 0;
> >   while($i<$n) {
> >     $j = rand(0,$n-1);
> >     while ($flag[$j]) { $j = ($j+1) % $n; }
> >     printf("%d. Element: %d<br>\n", $i+1, $z[$j] );
> >     $i++;
> >   }
> 
> Ich erinnerte mich, aber ich verstehe es nicht. Und siehe da: es
> funktioniert auch nicht!

Hatte ich damals nicht auch die vergessene Zeile nachgereicht?

1  $n = count($z);
2  $i = 0;
3  while($i<$n) {
4    $j = rand(0,$n-1);
5    while ($flag[$j]) { $j = ($j+1) % $n; }
7    $flag[$j]++;  // <---- die hier fehlte!
6    printf("%d. Element: %d<br>\n", $i+1, $z[$j] );
8    $i++;
9  }

Die Idee ist einfach:
  a. Zufallszahl erzeugen (Zeile 4)
  b. Falls die gewählte Zufallszahl schon einmal benutzt worden war,
     wird einfach solange die ausprobiert, bis eine noch unbenutzt
     gefunden ist (Zeile 5)
  c. Diese so gefunden Zufallszahl wird als benutzt markiert (Zeile 7)


Deinen Code genauer durchzusehen, hatte ich jetzt noch keine Zeit ...

Aber die Idee, nützliche Eigenarbeiten in dieser Art vorzustellen,
finde ich prinzipiell gut!

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ >
PGP: 0xE8EF4F75, 5244 5EF3 B0B1 3826  E4EC 8058 7B31 3AD7


php::bar PHP Wiki   -   Listenarchive