Random number generator ohne Duplikate in Javascript?
Ich brauche Hilfe mit dem schreiben von code zu schaffen, der eine zufällige Zahl aus einem array von 12 zahlen und drucken Sie es 9 mal ohne dupes. Das war hart für mich zu erreichen. Irgendwelche Ideen?
Können Sie upvote die Antwort 🙂
InformationsquelleAutor Vic | 2010-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor Jacob Relkin
Effektivste und effizienteste Weg, dies zu tun ist, zu mischen, Ihre zahlen, und drucken Sie dann die ersten neun von Ihnen. Verwenden Sie eine gute shuffle-Algorithmus.Was Thilo vorgeschlagen wird, geben Sie schlechte Ergebnisse. Siehe hier.
Bearbeiten
Hier ist eine kurze Knuth Shuffle-Algorithmus Beispiel:
Es ist nicht der gleiche Algorithmus, keine. Aber ich fürchte, es würde immer noch den gleichen Fehler erzeugen, wenn ich verstehe, Recht. Es gibt n^3 Ergebnisse der Algorithmus, mit dem land in einem der n! - Boxen. , Kann keine gleichmäßige Verteilung. Versuchen Sie das experiment in den Artikel mit Ihrem Algorithmus und sehen, ob es funktioniert.
In den Kommentaren zu dem blog, den Sie verlinkten, "mein" Algorithmus wird erzogen von "fabio". Er behauptet, dass es funktioniert, aber mit einer größeren Anzahl von swaps (nicht nur die array-Größe). Ich werde Lesen ein wenig mehr und sehen, ob ich nachweisen kann, es richtig oder falsch ist. Andrew Dunn ' s Vorschlag unten scheint statistisch korrekt, auch wenn es performance-Probleme.
Ich sah, dass der Kommentar, auf den Sie hingewiesen. Ich fühle immer noch, dass die Anzahl der Pfade muss teilbar durch n! passen Sie gleichmäßig in n! Ergebnisse, aber ich kann mich irren. Ich wäre daran interessiert zu sehen, was Sie finden, vergleichen Knuth ' s Algorithmus zu Ihnen Seite an Seite. Und ja, Dunn ' s Algorithmus funktionieren sollte (trotz Leistung).
Ich nehme es für die Statistiker: stats.stackexchange.com/questions/3082/...
InformationsquelleAutor JoshD
Versuchen Sie einmal dieses:
InformationsquelleAutor Sudhir Bastakoti
Dies ist relativ einfach zu tun, die Theorie dahinter ist, erstellen Sie ein anderes array, das hält den überblick über die Elemente des Arrays, die Sie verwendet haben.
Andere Methoden umfassen das mischen der array entfernen verwendet Elemente aus dem array, oder bewegte Elemente verwendet, um das Ende des Arrays.
Es scheint produzieren eine unvoreingenommene Folge von zahlen, aber. Das einzige problem, das ich sehen kann, ist die Leistung, wie wird es zunehmend schwieriger zu finden, die restlichen zahlen.
Genau, während der Algorithmus genügt für kleinere Datenmengen, für größere Mengen, die Sie benötigen, um sicherzustellen, dass Kollisionen nicht auftreten, entweder durch entfernen der Daten aus dem array, oder schieben Sie es bis zum Ende.
InformationsquelleAutor Randy the Dev
Wenn ich Sie richtig verstehe, Sie wollen, mische dein array.
Schleife ein paar mal (Länge des Arrays), und in jeder iteration werden zwei zufällige array-Indizes und vertauschen die beiden Elemente, die es gibt. (Update: wenn es dir wirklich ernst damit ist, dies kann nicht sein, das am besten Algorithmus).
Können Sie dann drucken die ersten neun array-Elemente, die in zufälliger Reihenfolge und nicht zu wiederholen.
InformationsquelleAutor Thilo
Hier ist ein allgemeiner Weg, um Zufallszahlen zwischen min und max ohne Duplikate:
Anruf mit:
InformationsquelleAutor cologne