Generieren Sie eindeutige Zufallszahlen zwischen 1 und 100

Lesezeit: 6 Minuten

Generieren Sie eindeutige Zufallszahlen zwischen 1 und 100
dotty

Wie kann ich welche generieren einzigartig zufällig Zahlen zwischen 1 und 100 mit JavaScript?

  • Nicht wirklich ein Betrüger, da sich dies auf Javascript konzentriert.

    – doof

    4. März 2010 um 14:41 Uhr

  • @dotty Nun, es gibt keinen wesentlichen Unterschied zwischen der Ausführung in Javascript und einer anderen Sprache, aber ich werde nicht für das Schließen stimmen.

    – Spitze

    4. März 2010 um 14:56 Uhr

  • Ich werde auch nicht für die Schließung stimmen. Das ist spezifisch genug.

    – Josh Stodola

    4. März 2010 um 14:59 Uhr

  • stackoverflow.com/q/4353830/419436

    – Jan

    26. Dezember 2010 um 21:58 Uhr

  • Es gibt einen anderen saubereren Weg, dies zu tun: stackoverflow.com/questions/51898200/…

    – Huangismus

    17. August 2018 um 15:45 Uhr

Generieren Sie eindeutige Zufallszahlen zwischen 1 und 100
ЯegDwight

  1. Füllen Sie ein Array mit den Zahlen 1 bis 100.
  2. Mische es.
  3. Nehmen Sie die ersten 8 Elemente des resultierenden Arrays.

  • Sicherlich ist es effizienter, den Code so zu optimieren, dass nur die ersten 8 Mischvorgänge ausgeführt werden? (und nehmen Sie dann die letzten 8 Elemente des halb gemischten Arrays)

    – Sekunde

    5. März 2010 um 10:06 Uhr

  • So mache ich das auch immer. Wenn ich also zehn zufällige Zeilen aus einer Datei mit einem Haufen Zeilen darin haben wollte, tue ich das randlines file | head -10.

    – tchrist

    9. September 2012 um 19:38 Uhr

  • Ich denke, das ist die richtige Antwort, weil sie die Wahrscheinlichkeitsverteilung beibehält, was die akzeptierte Antwort nicht tut

    – Roberto Tomás

    23. März 2017 um 22:51 Uhr

  • Was ist, wenn N=10^12? Nicht sehr effizient.

    – Shinzu

    28. Mai 2018 um 11:03 Uhr

  • @shinzou in der realen Welt würden Sie 10 ^ 12 Zahlen nicht mit JavaScript sortieren. Eine triviale Frage verlangt nach einer trivialen Antwort. Ich bin nicht hier, um den Welthunger zu lösen. Dafür bin ich gut gerüstet, aber darum geht es hier nicht.

    – ЯegDwight

    28. Mai 2018 um 22:35 Uhr

  • Warum ist es O(n)? Kann es nicht beliebig lange schleifen?

    – Anton Wieser

    13. Oktober 2018 um 8:13 Uhr

  • @AnthonyWieser Du hast Recht, im schlimmsten Fall. Ich implizierte einen durchschnittlichen Fall, da Set.add o (1) ist.

    – Alister

    13. Oktober 2018 um 10:31 Uhr

  • Ich denke, dies könnte 0 zurückgeben, wie es meine Antwort früher getan hat, bevor sie in die Verwendung geändert wurde Math.floor(Math.random()*100) + 1

    – adam0101

    13. November 2018 um 15:48 Uhr


  • Sehr cool zu entdecken Set im JS! Würde diese Lösung jedoch nicht zu einer unnötigen Generierung von Zahlen führen, bis man die Anforderung der Eindeutigkeit erfüllt, insbesondere in den letzten Iterationen, wenn 8 näher an 100 wäre? Also ich denke ich ziehe die auchelegante Antwort mit vor sort unter.

    – Gilad Barner

    6. Mai 2020 um 21:45 Uhr


Generieren Sie eindeutige Zufallszahlen zwischen 1 und 100
Felix Lemme

Ein anderer Ansatz besteht darin, ein Array mit 100 Elementen mit aufsteigenden Nummern zu generieren und es zufällig zu sortieren. Dies führt tatsächlich zu einem wirklich kurzen und (meiner Meinung nach) einfachen Ausschnitt.

const numbers = Array(100).fill().map((_, index) => index + 1);
numbers.sort(() => Math.random() - 0.5);
console.log(numbers.slice(0, 8));

  • Dies ist meine Lieblingsantwort von allen. Keine Ahnung, warum es nur 6 Stimmen bekam. Elegant und mit guter Komplexität (bereitgestellt sort ist gut implementiert, was ich sicher bin).

    – Gilad Barner

    6. Mai 2020 um 21:43 Uhr

  • Dies ist die Methode, die ich seit einiger Zeit verwende, aber es gibt ein Problem damit, weil Sie oft “pseudo-randomisierte Arrays” erhalten, die an einigen Stellen bereits gruppierte und sortierte Elemente enthalten. Aber es gibt einen Weg, es zu verbessern.

    – NoxFly

    20. Januar 2021 um 11:04 Uhr

Generieren Permutation von 100 Zahlen und wählen Sie dann seriell.

Verwenden Knuth-Shuffle-Algorithmus (auch bekannt als Fisher-Yates-Shuffle)..

Javascript:

  function fisherYates ( myArray,stop_count ) {
  var i = myArray.length;
  if ( i == 0 ) return false;
  int c = 0;
  while ( --i ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;

     // Edited thanks to Frerich Raabe
     c++;
     if(c == stop_count)return;

   }
}

CODE VOM LINK KOPIERT.

BEARBEITEN:

Verbesserter Code:

function fisherYates(myArray,nb_picks)
{
    for (i = myArray.length-1; i > 1  ; i--)
    {
        var r = Math.floor(Math.random()*i);
        var t = myArray[i];
        myArray[i] = myArray[r];
        myArray[r] = t;
    }

    return myArray.slice(0,nb_picks);
}

Potenzielles Problem:

Angenommen, wir haben ein Array von 100 Zahlen {zB [1,2,3…100]} und wir hören auf zu tauschen nach 8 Swaps; dann sieht das Array meistens wie folgt aus: {1,2,3,76,5,6,7,8,…Zahlen hier werden gemischt …10}.

Da jede Zahl mit Wahrscheinlichkeit 1/100 vertauscht wird, also prob. des Austauschens der ersten 8 Zahlen ist 8/100, während wahrscheinlich. andere 92 zu tauschen ist 92/100.

Aber wenn wir den Algorithmus für ein vollständiges Array ausführen, sind wir sicher, dass (fast) jeder Eintrag ausgetauscht wird.

Andernfalls stehen wir vor einer Frage: Welche 8 Zahlen sollen wir wählen?

  • Dies ist meine Lieblingsantwort von allen. Keine Ahnung, warum es nur 6 Stimmen bekam. Elegant und mit guter Komplexität (bereitgestellt sort ist gut implementiert, was ich sicher bin).

    – Gilad Barner

    6. Mai 2020 um 21:43 Uhr

  • Dies ist die Methode, die ich seit einiger Zeit verwende, aber es gibt ein Problem damit, weil Sie oft “pseudo-randomisierte Arrays” erhalten, die an einigen Stellen bereits gruppierte und sortierte Elemente enthalten. Aber es gibt einen Weg, es zu verbessern.

    – NoxFly

    20. Januar 2021 um 11:04 Uhr

1646632512 934 Generieren Sie eindeutige Zufallszahlen zwischen 1 und 100
Viktor Quinn

Die oben genannten Techniken sind gut, wenn Sie eine Bibliothek vermeiden möchten, aber je nachdem, ob Sie mit einer Bibliothek einverstanden wären, würde ich vorschlagen, sie auszuprobieren Chance zum Generieren zufälliger Dinge in JavaScript.

Speziell um Ihre Frage zu lösen, ist es mit Chance so einfach wie:

// One line!
var uniques = chance.unique(chance.natural, 8, {min: 1, max: 100});

// Print it out to the document for this snippet so we can see it in action
document.write(JSON.stringify(uniques));
<script src="http://chancejs.com/chance.min.js"></script>

Haftungsausschluss, als Autor von Chance bin ich etwas voreingenommen 😉

  • Upvote, weil ich das Run-Code-Snippet noch nie gesehen habe

    – Surfmuggle

    6. November 2014 um 21:02 Uhr

  • Wenn ich einen Code (8 zufällige alphanumerische Zeichenfolgen) für Coupons erstellen möchte, der eindeutig sein muss, wie kann ich das mit Chance.js tun? Hinweis: Die Coupons werden auf Anfrage erstellt, daher ist die Anzahl der Codes unbegrenzt

    – Oscar Yuandinata

    12. Januar 2015 um 7:04 Uhr

  • @OscarYuandinata das ist einfach, mach es einfach var codes = chance.unique(chance.string, 8) Wenn Sie die Codes aus einem bestimmten Zeichenpool benötigen, können Sie dies wie folgt angeben: chance.unique(chance.string, 8, {pool: "abcd1234"}) wobei abcd1234 beliebige Zeichen im Pool sein können. Sehen chancejs.com/#string

    – Victor Quinn

    16. Januar 2015 um 0:43 Uhr


  • @VictorQuinn, sorry, ich habe mich nicht klar ausgedrückt. Ich meine, der Gutscheincode ist eine zufällige alphanumerische Zeichenfolge mit 8 Zeichen, kein Array mit 8 zufälligen alphanumerischen Zeichenfolgen. hahaha..

    – Oscar Yuandinata

    16. Januar 2015 um 4:04 Uhr


  • Oh @OscarYuandinata, das ist viel einfacher, heh chance.string({ length: 8 }) und wenn Sie möchten, dass nur bestimmte Zeichen in dieser Zeichenfolge erscheinen, chance.string({ pool: 'abcd1234', length: 8 }) was eine zufällige 8-stellige Zeichenfolge aus den Zeichen abcd1234 zurückgeben würde, also zum Beispiel “2c2c44bc” oder “331141cc”

    – Victor Quinn

    16. Januar 2015 um 20:15 Uhr

963350cookie-checkGenerieren Sie eindeutige Zufallszahlen zwischen 1 und 100

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy