CodeKitHub
Generátor eszközök

Ingyenes lista véletlenszerűsítő

Utolsó frissítés:

Illessz be egy listát — neveket, feladatokat, sorsolási résztvevőket, bármit — soronként egy elemet, és keverd meg tisztességes, véletlenszerű sorrendbe egy valódi Fisher-Yates keveréssel. Kapcsold be a győztes-kiválasztó módot, hogy csak N véletlen elemet húzz, ami hasznos egy nyeremény győztesének kisorsolásához, vagy véletlen sorrend hozzárendeléséhez anélkül, hogy a teljes megkevert listát felfednéd.

Mi ez az eszköz?

A lista véletlenszerűsítő egy elemhalmazt véletlen sorrendbe rendez, vagy véletlen részhalmazt húz belőle. A nehézséget az jelenti, hogy ezt torzítás nélkül tegye: egy naiv megközelítés, mint egy tömb véletlen összehasonlító függvénnyel való rendezése, torz eloszlást eredményez, ahol bizonyos sorrendek jóval valószínűbbek másoknál.

Ez az eszköz a Fisher–Yates (Durstenfeld) keverési algoritmust használja, ami a bizonyítottan egyenletes véletlen permutáció szabványos módszere — a listád minden lehetséges sorrendje egyformán valószínű.

Miért érdemes használni?

  • Valóban torzítatlan keverés — Fisher–Yates, nem a gyakori sort(() => Math.random() - 0.5) anti-minta, amely torzítja az eredményeket.
  • Győztes-kiválasztó mód: pontosan N véletlen elemet húz a teljes lista megkeverése helyett, ideális sorsolásokhoz és nyereményjátékokhoz.
  • Opcionális duplikátum-eltávolítás keverés előtt, olyan listákhoz, amelyekben véletlen ismétlődések lehetnek.
  • Bármilyen szöveggel működik — nevek, feladatok, jegyek, nyeremények — soronként egy elemmel.
  • Privát: a keverés teljes egészében a böngésződben történik, semmi nem kerül feltöltésre.

Használati útmutató

  1. Illeszd be a listádat a mezőbe, soronként egy elemmel.
  2. Opcionálisan jelöld be a „duplikátumok eltávolítása keverés előtt” lehetőséget, ha a lista tartalmazhat ismétlődéseket.
  3. Teljes átrendezéshez csak kattints a Keverés gombra. Győztesek kiválasztásához jelöld be az N-elemes opciót, és állítsd be, hányat húzzon.
  4. Másold ki az eredményt — kattints újra a Keverés gombra bármikor egy friss véletlen sorrendért vagy új húzásért.

Példa

Bemenet

Alice
Bob
Charlie
Diana
Ethan

Kimenet

Egy véletlenszerűen átrendezett lista, például Charlie, Ethan, Alice, Diana, Bob — minden Keverés kattintásnál más.

2-re állított győztes-kiválasztó móddal ugyanaz a bemenet helyette csak Ethant és Alice-t adhatja — egy véletlen 2 elemes húzás, nem egy megkevert sorrend 2 elemes szelete.

Miért ad torz eredményt egy naiv keverés

A sort(() => Math.random() - 0.5) egy gyakori trükk, amely helyesnek tűnik, de nem az: arra támaszkodik, hogy a rendezési algoritmus egy adott mintában, adott számszor hívja meg az összehasonlító függvényt, a valós rendezési implementációk pedig ezt nem garantálják. A gyakorlati hatás egy olyan keverés, ahol bizonyos sorrendek gyakrabban jelennek meg másoknál — elég finoman ahhoz, hogy egy futó pillantás ne vegye észre, de statisztikailag mérhető sok futtatás során.

A Fisher–Yates megkerüli az egész problémát: ahelyett, hogy egy rendezési algoritmust kérne meg, hogy közvetve állítson elő véletlenszerűséget, közvetlenül felcseréli minden pozíciót egy véletlen fennmaradó pozícióval, pontosan egyszer, ami bizonyíthatóan egyenletes, függetlenül az adott nyelv rendezési implementációjától.

→ Véletlenszám-generátor · UUID Generátor

Gyakori kérdések

Miért ne használjam egyszerűen az array.sort(() => Math.random() - 0.5) megoldást?

Ez az egysoros trükk egy jól ismert anti-minta: a JavaScript sort() függvénye nem garantálja, hogy minden elempár ugyanannyiszor kerül összehasonlításra, így a kapott sorrend mérhetően torzul bizonyos permutációk felé — egyes elemek nagyobb eséllyel kerülnek az elejére vagy a végére, mint amit a valódi véletlenszerűség eredményezne. A Fisher–Yates felépítéséből adódóan teljesen elkerüli ezt, és ez az az algoritmus, amelyet ez az eszköz ténylegesen megvalósít.

Valóban torzítatlan a keverés sorrendje?

Igen. A Fisher–Yates egyszer végigmegy a listán, és minden lépésben felcseréli az aktuális elemet egy egyenletesen véletlen elemmel a fennmaradó, még meg nem kevert részből. Ez matematikailag bizonyítottan minden lehetséges sorrendet egyenlő valószínűséggel állít elő, jó véletlenszám-forrás mellett (a JavaScript Math.random() függvénye).

Mi a különbség a keverés és a győztes-kiválasztó mód között?

A Keverés mód a listád minden elemét átrendezi, és az összeset megmutatja, csak új sorrendben. A győztes-kiválasztó mód csak N elemet húz véletlenszerűen, és csak azokat mutatja meg — hasznos, ha rögzített számú győztest vagy mintát szeretnél kiválasztani anélkül, hogy a teljes átrendezett listát felfednéd.

Használhatom ezt valódi nyereménysorsoláshoz?

Igen, informális nyereményjátékokhoz és sorsolásokhoz ez jól működik, mivel a véletlenszerűség valóban egyenletes. Törvényileg szabályozott, pénzbeli nyereményekkel járó sorsoláshoz ellenőrizd a helyi szabályozásokat — egyes joghatóságok konkrét, ellenőrizhető sorsolási folyamatot írnak elő.

A duplikátumok eltávolítása megváltoztatja az eredeti listámat?

Nem — a deduplikálás csak a megkevert kimenetet érinti, és csak akkor, ha a jelölőnégyzet be van kapcsolva. A bemeneti listád pontosan úgy marad, ahogy beírtad, így az opciót be- és kikapcsolhatod, és újrakeverhetsz anélkül, hogy bármit is újra kellene írnod.

Kapcsolódó eszközök