CodeKitHub
Generatorska orodja

Brezplačno naključno mešanje seznama

Nazadnje posodobljeno:

Prilepi seznam — imena, opravila, žrebne vloge, karkoli — po eno postavko v vrstici, in ga premešaj v pošten naključni vrstni red s pravim Fisher-Yates mešanjem. Vklopi način izbire zmagovalcev, da izžrebaš samo N naključnih postavk, kar je uporabno za izbiro zmagovalca nagradne igre ali dodelitev naključnega vrstnega reda brez razkritja celotnega premešanega seznama.

Kaj je to orodje?

Orodje za naključno mešanje seznama razporedi niz postavk v naključno zaporedje ali izžreba naključno podmnožico iz njega. Težava je narediti to brez pristranskosti: naiven pristop, kot je razvrščanje polja z naključno primerjalno funkcijo, ustvari popačeno porazdelitev, kjer so nekateri vrstni redi veliko bolj verjetni od drugih.

To orodje uporablja algoritem Fisher–Yates (Durstenfeld), standardno metodo za dokazano enakomerno naključno permutacijo — vsak možen vrstni red tvojega seznama je enako verjeten.

Zakaj ga uporabiti?

  • Resnično nepristransko mešanje — Fisher–Yates, ne pogosta past sort(() => Math.random() - 0.5), ki popači rezultate.
  • Način izbire zmagovalcev: izžrebaj natanko N naključnih postavk namesto mešanja celega seznama, idealno za nagradne igre in žrebanja.
  • Neobvezno odstranjevanje podvojenih vnosov pred mešanjem, za sezname, ki morda vsebujejo naključne ponovitve.
  • Deluje s katerim koli besedilom — imena, opravila, vstopnice, nagrade — po ena postavka v vrstici.
  • Zasebno: mešanje poteka v celoti v tvojem brskalniku, nič se ne nalaga v oblak.

Kako ga uporabljati

  1. Prilepi svoj seznam v polje, po eno postavko v vrstici.
  2. Po želji obkljukaj "remove duplicates before shuffling", če seznam morda vsebuje ponovitve.
  3. Za celoten premešani vrstni red preprosto klikni Shuffle. Za izbiro zmagovalcev obkljukaj možnost N postavk in nastavi, koliko jih želiš izžrebati.
  4. Kopiraj rezultat — Shuffle klikni znova kadar koli za nov naključni vrstni red ali nov žreb.

Primer

Vnos

Ana
Boris
Cene
Daša
Erik

Rezultat

Naključno premešan seznam, na primer Cene, Erik, Ana, Daša, Boris — vsakič drugačen ob kliku na Shuffle.

Z načinom izbire zmagovalcev, nastavljenim na 2, isti vnos lahko namesto tega da samo Erik in Ana — naključen žreb 2 postavk, ne 2-postavčni izrez enega premešanega vrstnega reda.

Zakaj naivno mešanje da pristranske rezultate

sort(() => Math.random() - 0.5) je pogost trik, ki je videti pravilen, a ni: opira se na to, da algoritem razvrščanja pokliče primerjalno funkcijo določeno število krat v določenem vzorcu, dejanske implementacije razvrščanja pa tega ne zagotavljajo. Praktičen učinek je mešanje, pri katerem se določeni vrstni redi pojavljajo pogosteje kot drugi — dovolj subtilno, da gre mimo na prvi pogled, a statistično merljivo pri večjem številu ponovitev.

Fisher–Yates se izogne celotni težavi: namesto da bi od algoritma razvrščanja posredno zahteval naključnost, neposredno zamenja vsako mesto z naključnim preostalim mestom natanko enkrat, kar je dokazano enakomerno ne glede na osnovno implementacijo razvrščanja v jeziku.

Generator naključnih števil · Generator UUID

Pogosta vprašanja

Zakaj ne uporabiti kar array.sort(() => Math.random() - 0.5)?

Ta enovrstičnik je znana past: JavaScriptov sort() ne zagotavlja, da se vsak par elementov primerja enako pogosto, zato je nastali vrstni red merljivo pristranski v korist določenih permutacij — nekatere postavke pogosteje pristanejo bliže začetku ali koncu, kot bi to naredila prava naključnost. Fisher–Yates se temu popolnoma izogne po konstrukciji, in to je algoritem, ki ga to orodje dejansko izvaja.

Ali je vrstni red mešanja res nepristranski?

Da. Fisher–Yates enkrat prehodi seznam in pri vsakem koraku zamenja trenutno postavko z enakomerno naključno izbrano postavko iz preostalega še nepremešanega dela. Dokazano je, da to ustvari vsak možen vrstni red z enako verjetnostjo, ob dobrem viru naključnosti (JavaScriptov Math.random()).

Kakšna je razlika med mešanjem in načinom izbire zmagovalcev?

Način mešanja preuredi vsako postavko v tvojem seznamu in ti pokaže vse, le v novem vrstnem redu. Način izbire zmagovalcev izžreba samo N naključnih postavk in pokaže le te — uporabno, ko želiš izbrati fiksno število zmagovalcev ali vzorcev, ne da bi razkril celoten premešan seznam.

Ali lahko to uporabim za pravo žrebanje nagrad ali nagradno igro?

Da, za neuradne nagradne igre in žrebanja to dobro deluje, saj je naključnost resnično enakomerna. Za pravno urejeno nagradno igro z denarnimi nagradami preveri lokalne predpise — nekatere jurisdikcije zahtevajo poseben, revidirano preverljiv postopek žrebanja.

Ali odstranjevanje podvojenih vnosov spremeni moj izvirni seznam?

Ne — odstranjevanje podvojenih vnosov vpliva samo na premešan izpis, in to samo, kadar je potrditveno polje vklopljeno. Tvoj vnosni seznam ostane natančno tak, kot si ga vtipkal, zato lahko možnost preklopiš in ponovno premešaš, ne da bi karkoli znova tipkal.

Sorodna orodja