CodeKitHub
Generaatortööriistad

Tasuta nimekirja juhuslikustaja

Viimati uuendatud:

Kleebi nimekiri — nimed, ülesanded, loosikirjed, mis iganes — üks rida kirje kohta, ning sega see õiglasesse juhuslikku järjekorda korrektse Fisher-Yates'i segamismeetodi abil. Lülita sisse võitjavaliku režiim, et tõmmata ainult N juhuslikku kirjet — kasulik loosivõitja valimiseks või juhusliku järjekorra määramiseks ilma kogu segatud nimekirja avaldamata.

Mis see tööriist on?

Nimekirja juhuslikustaja järjestab kirjete komplekti juhuslikku järjekorda või tõmbab sellest juhusliku alamhulga. Keeruline osa on seda teha ilma kallutatuseta: naiivne lähenemine, nagu massiivi sortimine juhusliku võrdlusfunktsiooniga, tekitab kallutatud jaotuse, kus mõned järjestused on palju tõenäolisemad kui teised.

See tööriist kasutab Fisher-Yates'i (Durstenfeld) segamisalgoritmi — standardset meetodit tõestatavalt ühtlase juhusliku permutatsiooni saamiseks: iga sinu nimekirja võimalik järjestus on ilmumiseks võrdselt tõenäoline.

Miks seda kasutada?

  • Tõeliselt erapooletu segamine — Fisher-Yates, mitte levinud sort(() => Math.random() - 0.5) anti-muster, mis tulemusi kallutab.
  • Võitjavaliku režiim: tõmba täpselt N juhuslikku kirjet kogu nimekirja segamise asemel, ideaalne loosimiste ja kingituste jaoks.
  • Valikuline duplikaatide eemaldamine enne segamist, nimekirjade jaoks, kus võib olla kogemata korduvaid kirjeid.
  • Töötab mistahes tekstiga — nimed, ülesanded, piletid, auhinnad — üks kirje rea kohta.
  • Privaatne: segamine toimub täielikult sinu brauseris, midagi ei laadita üles.

Kuidas kasutada

  1. Kleebi oma nimekiri kasti, üks kirje rea kohta.
  2. Valikuliselt märgi "remove duplicates before shuffling", kui nimekirjas võib olla kordusi.
  3. Täieliku ümberjärjestuse jaoks klõpsa lihtsalt Shuffle. Võitjate valimiseks märgi N-kirje valik ja määra, mitu tõmmata.
  4. Kopeeri tulemus — klõpsa Shuffle uuesti mistahes ajal, et saada uus juhuslik järjekord või uus tõmme.

Näide

Sisend

Alice
Bob
Charlie
Diana
Ethan

Tulemus

Juhuslikult ümberjärjestatud nimekiri, näiteks Charlie, Ethan, Alice, Diana, Bob — iga kord, kui klõpsad Shuffle, on tulemus erinev.

Kui võitjavaliku režiim on seatud 2-le, võib sama sisend anda hoopis lihtsalt Ethani ja Alice — juhusliku 2-kirjelise tõmbe, mitte ühe segatud järjestuse 2-kirjelise väljalõike.

Miks naiivne segamine annab kallutatud tulemusi

sort(() => Math.random() - 0.5) on levinud trikk, mis näib õige, kuid pole seda: see sõltub sellest, et sortimisalgoritm kutsuks võrdlusfunktsiooni kindla arvu kordi kindlas mustris, ja päris sortimisrakendused seda ei taga. Praktiline mõju on segamine, kus teatud järjestused ilmuvad sagedamini kui teised — piisavalt peene, et jääda juhuslikul pilgul märkamatuks, kuid statistiliselt mõõdetav paljude käivituste peale.

Fisher-Yates lahendab kogu probleemi: selle asemel, et paluda sortimisalgoritmil juhuslikkust kaudselt tekitada, vahetab see iga positsiooni otse juhusliku ülejäänud positsiooniga täpselt üks kord, mis on tõestatavalt ühtlane olenemata aluseks oleva keele sortimisrakendusest.

Juhuslike arvude generaator · UUID Generaator

Korduma kippuvad küsimused

Miks mitte lihtsalt kasutada array.sort(() => Math.random() - 0.5)?

See üherealine trikk on tuntud anti-muster: JavaScripti sort() ei taga, et iga elemendipaari võrreldakse sama arv kordi, seega tulemuseks olev järjekord on mõõdetavalt kallutatud teatud permutatsioonide poole — mõned kirjed satuvad tõenäolisemalt algusesse või lõppu, kui tõeline juhuslikkus annaks. Fisher-Yates väldib seda täielikult oma konstruktsiooni tõttu ja see on algoritm, mida see tööriist tegelikult rakendab.

Kas segamise järjekord on tõesti erapooletu?

Jah. Fisher-Yates käib nimekirja läbi ühe korra ja igal sammul vahetab praeguse kirje ühtlaselt juhusliku kirjega ülejäänud segamata osast. See on matemaatiliselt tõestatud tekitama iga võimaliku järjestuse võrdse tõenäosusega, kui juhuslikkuse allikas (JavaScripti Math.random()) on hea.

Mis vahe on segamisel ja võitjavaliku režiimil?

Segamisrežiim järjestab kõik nimekirja kirjed ümber ja näitab neid kõiki, lihtsalt uues järjekorras. Võitjavaliku režiim tõmbab juhuslikult ainult N kirjet ja näitab ainult neid — kasulik, kui soovid valida kindla arvu võitjaid või näidiseid ilma kogu ümberjärjestatud nimekirja avaldamata.

Kas ma saan seda kasutada päris auhinnaloosiks?

Jah, mitteametlike kingituste ja loosimiste jaoks töötab see hästi, kuna juhuslikkus on tõeliselt ühtlane. Seaduslikult reguleeritud rahaliste auhindadega loterii jaoks kontrolli oma kohalikke eeskirju — mõned jurisdiktsioonid nõuavad konkreetset auditeeritavat loosimisprotsessi.

Kas duplikaatide eemaldamine muudab mu algset nimekirja?

Ei — dubleerimise eemaldamine mõjutab ainult segatud väljundit ja ainult siis, kui märkeruut on aktiveeritud. Sinu sisendnimekiri jääb täpselt selliseks, nagu selle kirjutasid, nii et saad valikut lülitada ja uuesti segada ilma midagi uuesti kirjutamata.

Seotud tööriistad