Ich muss zwei verschiedene Zufallszahlen erzeugen, sie können nicht gleich zueinander oder zu einer dritten Zahl sein. Ich habe versucht, jede Menge Möglichkeiten zu nutzen, aber es scheint, dass meine Algorithmen nicht so gut sind.
Kann mir jemand dabei helfen?
%Vor%Dies ist, was ich bisher habe, der nächste Schritt wäre:
%Vor%Ist mein Gedankengang richtig? Hinweis: Die erzeugten Zahlen müssen zwischen 0 und 3 liegen. Vielen Dank im Voraus.
Sie können ein Array von zufälligen Möglichkeiten erstellen und dann Elemente aus diesem Array entfernen, wenn sie verwendet werden, indem Sie aus den verbleibenden Werten im Array zukünftige Zufallszahlen auswählen. Dadurch wird vermieden, dass bei der Suche nach einem Wert, der nicht mit den vorherigen Elementen übereinstimmt, eine Schleifenoperation durchgeführt wird.
%Vor%Arbeitsdemo: Ссылка
Zu Ihrer Information: Diese Technik ist im Allgemeinen effizienter als das Schleifen, bis Sie etwas Neues erhalten, wenn Sie die meisten Zahlen innerhalb eines Bereichs zufällig auswählen, da dies nur die zuvor verwendeten Zahlen aus dem Zufallssatz eliminiert, so dass dies nicht notwendig ist rate immer und immer wieder, bis es einen unbenutzten Wert bekommt.
Diese Version minimiert die Anzahl der Aufrufe an zufällige wie Sie, ist aber ein bisschen einfacher und nicht voreingenommen. In deiner Version gibt es eine 2/4-Chance, dass numberOne auf 0 geht, und eine 1/4-Chance auf 1 und 2. In meiner Version gibt es gleiche Chancen, dass numberOne als 0, 1 oder 2 endet / p> %Vor%
Es ist ein spezieller Fall der Array-Shuffling-Version deceze erwähnt, aber für wenn Sie nur zwei Zahlen haben
Sie müssen n2
mit dem Minimum von n1
und n3
vergleichen, um sicherzustellen, dass Sie keine Gleichheit haben:
Angenommen n1=1
und n3=2
. Wenn Sie n2=1
erhalten und zuerst mit n3
vergleichen, werden Sie n2
im ersten Schritt nicht erhöhen. Im zweiten Schritt würden Sie es seit n2 >= n1
erhöhen. Am Ende n2 = 2 = n3
.
Dieser Algorithmus garantiert eine gleichmäßige Verteilung und Sie rufen nur zweimal Math.random()
auf.
Beachten Sie, dass Aufrufe von Math.random()
einen Fehler in Chrome safeRand()
unten.:
Dies ist immer noch nicht ideal, aber reduziert die Korrelationen signifikant, wie jeder zusätzliche, verworfene Aufruf von Math.random()
.
Tags und Links javascript algorithm random