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