CodeKitHub
Ģeneratoru rīki

Bezmaksas saraksta randomizētājs

Pēdējoreiz atjaunināts:

Ielīmējiet sarakstu — vārdus, uzdevumus, loterijas dalībniekus, jebko — pa vienam vienumam katrā rindā, un sajauciet to godīgā nejaušā secībā, izmantojot pareizu Fišera-Jeitsa jaukšanu. Ieslēdziet uzvarētāju izvēles režīmu, lai izvilktu tikai N nejaušus vienumus — noderīgi, izvēloties dāvanu izlozes uzvarētāju vai piešķirot nejaušu secību, neatklājot visu sajaukto sarakstu.

Kas ir šis rīks?

Saraksta randomizētājs sakārto vienumu kopu nejaušā secībā vai izvelk no tās nejaušu apakškopu. Sarežģītā daļa ir izdarīt to bez nosliekuma: naivi paņēmieni, piemēram, masīva kārtošana ar nejaušu salīdzināšanas funkciju, rada nevienmērīgu sadalījumu, kurā dažas secības ir daudz iespējamākas nekā citas.

Šis rīks izmanto Fišera-Jeitsa (Durstenfelda) jaukšanas algoritmu — standarta metodi pierādāmi vienmērīgai nejaušai permutācijai — katra iespējamā jūsu saraksta secība ir vienlīdz iespējama.

Kāpēc to izmantot?

  • Patiesi objektīva jaukšana — Fišera-Jeitsa, nevis izplatītais sort(() => Math.random() - 0.5) antimodelis, kas rada nosliekumu rezultātos.
  • Uzvarētāju izvēles režīms: izvelciet tieši N nejaušus vienumus, nevis sajauciet visu sarakstu — ideāli loterijām un dāvanu izlozēm.
  • Neobligāta dublikātu noņemšana pirms jaukšanas, sarakstiem, kuros var būt nejaušas atkārtošanās.
  • Strādā ar jebkuru tekstu — vārdiem, uzdevumiem, biļetēm, balvām — pa vienam vienumam katrā rindā.
  • Privāts: jaukšana notiek pilnībā jūsu pārlūkā, nekas netiek augšupielādēts.

Kā to lietot

  1. Ielīmējiet sarakstu lodziņā, pa vienam vienumam katrā rindā.
  2. Pēc izvēles atzīmējiet "noņemt dublikātus pirms jaukšanas", ja sarakstā var būt atkārtojumi.
  3. Pilnai sajaukšanai vienkārši nospiediet Shuffle. Uzvarētāju izvēlei atzīmējiet N-vienumu opciju un iestatiet, cik daudz izvilkt.
  4. Kopējiet rezultātu — nospiediet Shuffle atkal jebkurā laikā, lai iegūtu jaunu nejaušu secību vai jaunu izlozi.

Piemērs

Ievade

Alise
Bens
Čārlijs
Diāna
Etans

Izvade

Nejauši sakārtots saraksts, piemēram, Čārlijs, Etans, Alise, Diāna, Bens — katru reizi, nospiežot Shuffle, cits.

Uzvarētāju izvēles režīmā, iestatot 2, tas pats ievads var dot, piemēram, tikai Etanu un Alisi — nejaušu 2 vienumu izlozi, nevis 2 vienumu izgriezumu no vienas sajauktas secības.

Kāpēc naivā jaukšana rada nosliektus rezultātus

sort(() => Math.random() - 0.5) ir izplatīts triks, kas izskatās pareizs, taču nav: tas paļaujas uz to, ka kārtošanas algoritms izsauc salīdzināšanas funkciju noteiktu reižu skaitu noteiktā modelī, taču reālas kārtošanas implementācijas to negarantē. Praktiskais efekts ir jaukšana, kurā noteiktas secības parādās biežāk nekā citas — pietiekami smalki, lai izietu ikdienišķu pārbaudi, bet statistiski izmērāmi vairāku palaišanas reižu laikā.

Fišera-Jeitsa apiet visu problēmu: nevis lūdz kārtošanas algoritmam netieši radīt nejaušību, tas tieši apmaina katru pozīciju ar nejaušu atlikušo pozīciju tieši vienu reizi, kas ir pierādāmi vienmērīgi neatkarīgi no pamata valodas kārtošanas implementācijas.

Nejaušu skaitļu ģenerators · UUID Ģenerators

Biežāk uzdotie jautājumi

Kāpēc neizmantot array.sort(() => Math.random() - 0.5)?

Šī viena rindiņa ir labi zināms antimodelis: JavaScript sort() negarantē, ka katrs elementu pāris tiek salīdzināts vienādu reižu skaitu, tāpēc rezultējošā secība ir izmērāmi nosliekta uz noteiktām permutācijām — daži vienumi biežāk nokļūst tuvāk sākumam vai beigām, nekā to dotu patiesa nejaušība. Fišera-Yeitsa no tā izvairās pēc konstrukcijas, un tas ir algoritms, ko šis rīks faktiski īsteno.

Vai jaukšanas secība patiešām ir bez nosliekuma?

Jā. Fišera-Jeitsa vienreiz izstaigā sarakstu, un katrā solī apmaina pašreizējo vienumu ar vienmērīgi nejaušu vienumu no atlikušās nesajauktās daļas. Tas ir matemātiski pierādīts, ka rada katru iespējamo secību ar vienādu varbūtību, ja ir laba nejaušības avota kvalitāte (JavaScript Math.random()).

Kāda ir atšķirība starp jaukšanu un uzvarētāju izvēles režīmu?

Jaukšanas režīms pārkārto katru sarakstā esošo vienumu un rāda tos visus, tikai jaunā secībā. Uzvarētāju izvēles režīms izvelk tikai N nejaušus vienumus un rāda tikai tos — noderīgi, ja vēlaties izvēlēties fiksētu skaitu uzvarētāju vai paraugu, neatklājot visu pārkārtoto sarakstu.

Vai to var izmantot reālai balvu izlozei vai loterijai?

Jā, neformālām dāvanu izlozēm un izlozēm tas darbojas labi, jo nejaušība ir patiesi vienmērīga. Juridiski regulētai loterijai ar naudas balvām pārbaudiet vietējos noteikumus — dažās jurisdikcijās nepieciešams īpašs, pārbaudāms izlozes process.

Vai dublikātu noņemšana maina manu sākotnējo sarakstu?

Nē — deduplikācija ietekmē tikai sajaukto izvadi, un tikai tad, kad izvēles rūtiņa ir ieslēgta. Jūsu ievades saraksts paliek tieši tāds, kā to ierakstījāt, tāpēc varat pārslēgt opciju un sajaukt no jauna, neko no jauna neierakstot.

Saistītie rīki