Calocybe: Zufallsauswahl ohne Wiederholung

Beitrag lesen

Re!

Was interessant gewesen wäre, wäre ein "Löschen mit Aufrücken" der verbleibenden Elemente, so dass das Array immer kleiner wird. Dann kann man array.length abfragen, damit den Wertebereich der Zufallszahl beeinflussen, und kriegt garantiert ein Ergebnis raus. Damit ist sichergestellt, dass nach array.length Durchgängen alle Elemente des Arrays ausgewählt und verwurschtelt worden sind - eben echtes "Ziehen ohne Zurücklegen".

Genau darauf war ich eigentlich aus. Ich hab das delete wohl missverstanden. Jetzt merke ich erst, dass wenn in dem Netscape-Beispiel trees[3] nicht mehr existiert, die nachfolgenden Elemente eben *nicht* nachgerueckt sind. Somit ist eine Luecke im Array. An die Moeglichkeit hab ich gar nicht gedacht, weil das meiner Vorstellung eines Arrays voellig widerspricht. Nun ja, es gibt aber zum Glueck noch die Methode Array.splice(), die in Kapitel 15.4.4.12 von ECMA-262-3 und bei http://docserv.calocybe.dyndns.org/specs/NetscapeCommunications/JavaScript13ClientReference/array.htm#1193766 beschrieben ist. Mit

foto.splice(number, 1);

sollte das Ziehen ohne Zuruecklegen dann doch zu bewerkstelligen sein. Dummerweise gibt es bei pop(), push(), slice(), splice() und wahrscheinlich anderen immer wieder Probleme mit dem IE. Der hat es zumindest bis Version 5 nicht geschafft, diese zu implementieren. Ob es der 6er kann, weiss ich nicht. Aber auch dafuer gibt es Abhilfe - siehe http://forum.de.selfhtml.org/archiv/2001/5/24275/#m126404.

Die Methode, die Wahl eines Elements zu speichern und im Wiederholungsfall einfach das nachfolgende Element zu nehmen, halte ich hingegen für nicht korrekt. Die Wahrscheinlichkeiten, dass dieses nachfolgende Element ausgewählt wird, verdoppeln sich schlicht bei solch einer Vorgehensweise.

Yoh, aber ich glaube, es reicht in diesem, wenn es nur einigermaszen zufaellig *aussieht*.

Und einfach nochmal eine neue Zufallszahl zu ziehen dürfte für das letzte Element ebenfalls ziemlich zeitaufwendig werden, wenn es z.B. das erste Element ist, einfach keine zufällige 1 entstehen will, und keine nachfolgenden Elemente mehr vorkommen, auf die man ausweichen kann.

Richtig, das hat mich auch gestoert.

So long

--
Falscher oder fehlender Kaffee. Benutzer angehalten.