Sven Rautenberg: Zufallsauswahl ohne Wiederholung

Beitrag lesen

Moin!

Ich hatte sogar extra nochmal nachgesehen, ob es den Operator (nicht Methode) nicht vielleicht wirklich nur in meiner getruebten Erinnerung gibt. Aber nicht in Selfhtml, sondern in der ECMA-262.3-Spec und in der alten JavaScript-1.3-Reference von Netscape. In ersterer findest Du delete im Kapitel 11.4.1, in der letzteren unter http://docserv.calocybe.dyndns.org/specs/NetscapeCommunications/JavaScript13ClientReference/ops.htm#1045837.

Ok, das gibts tatsächlich - aber es bringt leider nicht sonderlich viel. Das Zuweisen von einem Leerstring, undefined oder NULL würde gleiche Ergebnisse, zumindest aber die gleichen Handlungsoptionen bieten.

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".

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.

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.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)