ஒரு பரிசுப் போட்டிக்கான வெற்றியாளரைக் குலுக்கல் முறையில் தேர்ந்தெடுக்க வேண்டுமா, ஒரு மாணவரை அழைக்க வேண்டுமா, அல்லது பாத்திரங்களை யார் கழுவுவது என்பதைத் தீர்மானிக்க வேண்டுமா? இந்த இலவச ஆன்லைன் சீரற்ற தேர்வி, நீங்கள் ஒட்டும் எந்தவொரு பட்டியலிலிருந்தும் நியாயமான முறையில் தேர்வுசெய்கிறது. உங்கள் உள்ளீடுகளை 'உருப்படிகள்' பெட்டியில் போடுங்கள் — ஒவ்வொன்றும் புதிய வரியில், அல்லது கமாக்களால் பிரித்து — 'தேர்வுகளின் எண்ணிக்கை' மூலம் உங்களுக்குத் தேவையான எண்ணிக்கையை அமைத்து, 'உருவாக்கு' என்பதை அழுத்தவும். ஒரு பட்டியலில் குறைந்தது இரண்டு உள்ளீடுகள் இருக்க வேண்டும் மற்றும் அதிகபட்சமாக 1000 உள்ளீடுகள் வரை இருக்கலாம்; ஒவ்வொன்றும் 200 எழுத்துகள் வரை இருக்கலாம்.
ஒவ்வொரு தேர்வும் Web Crypto API (crypto.getRandomValues) மூலம் உங்கள் உலாவியிலேயே நேரடியாகச் செய்யப்படுகிறது; இது உங்கள் உலாவியின் அடிப்படை அமைப்பிலிருந்து கிரிப்டோகிராஃபிக் முறையில் பாதுகாப்பான சீரற்ற மதிப்புகளை வழங்குகிறது. உங்கள் பட்டியல் ஒருபோதும் எந்த சர்வருக்கும் அனுப்பப்படுவதில்லை, பதிவு செய்யப்படுவதில்லை, மற்றும் எங்களால் பார்க்கப்படுவதும் இல்லை — வாடிக்கையாளர் பட்டியல், வகுப்பின் வருகைப்பதிவேடு அல்லது சக ஊழியர்களின் பெயர்கள் போன்றவற்றைத்தான் மக்கள் பொதுவாக ஒட்டுவார்கள் என்பதால், பெரும்பாலான பிற கருவிகளை விட இங்கு இது மிகவும் முக்கியமானது. 'கோப்பிலிருந்து ஏற்றவும்' பொத்தானும் இதே வாக்குறுதியைக் காப்பாற்றுகிறது: உங்கள் உலாவி கோப்பைத் தானே படித்து, பெட்டியை உங்கள் சாதனத்திலேயே நிரப்புகிறது, எதுவும் எங்கும் பதிவேற்றப்படுவதில்லை.
மக்களிடம் உள்ள பல்வேறு வகையான பட்டியல்களுக்கு ஏற்றவாறு இதன் விருப்பத்தேர்வுகள் வடிவமைக்கப்பட்டுள்ளன. 'உருப்படி பிரிப்பான்' என்பது 'தானியங்கி கண்டறிதல்' என்பதில் வைக்கப்பட்டிருக்கும்; இது புதிய வரிகள் மற்றும் கமாக்களைப் படித்து, உங்கள் பட்டியல் இரண்டில் எதைப் பயன்படுத்துகிறது என்பதைக் கண்டறிகிறது, எனவே விரிதாள், அரட்டைச் செய்தி அல்லது ஆவணத்திலிருந்து நகலெடுக்கப்பட்ட பட்டியல் எந்தவொரு மாற்றமும் இன்றி அப்படியே வேலை செய்யும். உங்கள் தரவில் பல்வேறு வடிவங்கள் கலந்திருந்தால், இதை 'புதிய வரி', 'கமா' அல்லது 'இடைவெளி' என்பதில் நிலைநிறுத்துங்கள் — மேலும் 'இடைவெளி' என்பது எப்போதும் திட்டமிட்ட தேர்வாகவே இருக்கும், ஒருபோதும் தானியங்கியாகச் செயல்படாது; ஏனெனில் முழுப் பெயர்கள் போன்ற உள்ளீடுகளுக்குள்ளேயே இடைவெளிகள் இருக்கும் என்பதால், இயல்பாகவே அவற்றைப் பிரிப்பது பட்டியல்களைச் சரிசெய்வதற்குப் பதிலாக அதிக அளவில் சிதைத்துவிடும். 'தேர்வுகளின் எண்ணிக்கை' என்பது 1 முதல் 100 வரை எத்தனை உள்ளீடுகளைக் குலுக்கலில் எடுக்க வேண்டும் என்பதைத் தீர்மானிக்கிறது. 200 பங்கேற்பாளர்களிலிருந்து மூன்று பரிசு வெற்றியாளர்களைக் குலுக்கல் முறையில் எடுக்க வேண்டுமா? பங்கேற்பாளர்களை ஒட்டி, 'தேர்வுகளின் எண்ணிக்கை' என்பதை 3 என அமைத்து, 'உருவாக்கு' என்பதை அழுத்தவும். தேர்வுகளின் எண்ணிக்கை 2 அல்லது அதற்கு மேல் இருக்கும்போது மட்டுமே இரண்டு கட்டுப்பாடுகள் பொருந்தும், அதுவரை அவை மங்கலாகவே இருக்கும்: 'நகல்களைத் தவிர்க்கவும்' என்பது ஒரே உள்ளீட்டை இரண்டு முறை எடுக்க முடியுமா என்பதைத் தீர்மானிக்கிறது, மற்றும் 'வெளியீட்டு வடிவம்' என்பது தேர்வுகள் எவ்வாறு பிரிக்கப்படுகின்றன என்பதை அமைக்கிறது — 'ஒவ்வொன்றும் புதிய வரியில்', 'இடைவெளியால் பிரிக்கப்பட்டது', அல்லது 'கமாவால் பிரிக்கப்பட்டது'.
நீங்கள் வேறு எங்காவது செய்ய வேண்டிய திருத்தங்களை 'உருப்படிகள்' பெட்டிக்குள் உள்ள பொத்தான்களின் வரிசை செய்துவிடுகிறது. 'கோப்பிலிருந்து ஏற்றவும்' என்பது எளிய உரை அல்லது CSV கோப்பிலிருந்து பட்டியலை நேரடியாக இழுக்கிறது. 'கலைக்கவும்' என்பது பெட்டியில் உள்ள உள்ளீடுகளின் வரிசையை மாற்றியமைக்கிறது, 'வரிசைப்படுத்தவும்' என்பது எண்களை இயற்கையான முறையில் கொண்டு அவற்றை அகரவரிசைப்படி அமைக்கிறது, மேலும் இதை மீண்டும் கிளிக் செய்தால் வரிசை தலைகீழாக மாறும்; மற்றும் 'அழி' என்பது பெட்டியைக் காலியாக்குகிறது. இந்தக் கருவியை ஒரே கிளிக்கில் நீங்கள் முயற்சித்துப் பார்ப்பதற்காக 'மாதிரி தரவை நிரப்பவும்' என்பது ஒரு சிறிய எடுத்துக்காட்டுப் பட்டியலை உள்ளிடுகிறது; அதேசமயம் 'விரிவாக்கவும்' என்பது நீண்ட பட்டியலை முழுமையாகக் காட்ட பெட்டியைத் திறக்கிறது மற்றும் 'சுருக்கவும்' என்பது அதனை மீண்டும் அதன் இயல்பான அளவுக்குச் சுருக்குகிறது. முடிவுகளுக்குக் கீழே உள்ள 'அனைத்தையும் நகலெடு' ஒவ்வொரு தேர்வையும் உங்கள் கிளிப்போர்டில் வைக்கிறது, 'கோப்பில் சேமி' அவற்றை ஒரு கோப்பாக எழுதிச் சேமிக்கிறது, மற்றும் 'வரலாறு' உங்கள் முந்தைய 10 குலுக்கல்களை உங்கள் உலாவியிலேயே வைத்திருக்கிறது, எனவே முந்தைய முடிவை ஒரே கிளிக்கில் நீங்கள் எடுத்துக்கொள்ளலாம்.
இந்தத் தேர்வு உண்மையில் எவ்வாறு செய்யப்படுகிறது? நீங்கள் 'உருவாக்கு' என்பதை அழுத்தும்போது, இந்தப் பக்கம் crypto.getRandomValues மூலம் உலாவியிடம் சீரற்ற மதிப்புகளைக் கேட்கிறது மற்றும் Math.random() போன்ற போலி-சீரற்ற JavaScript செயல்பாட்டைப் பயன்படுத்துவதற்குப் பதிலாக, உங்கள் பட்டியலில் உள்ள இடங்களைத் தேர்வுசெய்ய அவற்றைப் பயன்படுத்துகிறது. ஒரு மூல 32-பிட் மதிப்பை ஒரு இடமாக மாற்றுவதுதான் சீரற்ற தேர்வி கருவிகள் அமைதியாகத் தவறு செய்யும் இடமாகும்: மதிப்பை பட்டியலின் நீளத்தால் மாடுலோ எடுப்பது வெளிப்படையான ஆனால் சார்புடைய ஒரு அணுகுமுறையாகும்; ஏனெனில் பட்டியலின் நீளத்தால் 2^32 என்ற எண் மீதியின்றி வகுக்கப்படாவிட்டால், பட்டியலின் தொடக்கத்திற்கு அருகில் உள்ள உள்ளீடுகள் மற்றவற்றை விடச் சற்று அதிகமாகவே வரும். அக்குறைபாடு modulo bias என அழைக்கப்படுகிறது, இது வெறும் கோட்பாடு மட்டுமல்ல, அளவிடக்கூடிய ஒன்றாகும். அதற்குப் பதிலாக இந்தக் கருவி, பட்டியலின் நீளத்தின் மிகப்பெரிய துல்லியமான மடங்குக்கும் அதிகமான எந்தவொரு மதிப்பையும் நிராகரித்துவிட்டு மீண்டும் குலுக்கல் செய்கிறது — இது rejection sampling என்றழைக்கப்படும் ஒரு நுட்பமாகும். இதற்குச் சில கூடுதல் குலுக்கல்கள் தேவைப்பட்டாலும், தோராயமான உத்தரவாதத்திற்குப் பதிலாக ஒரு துல்லியமான உத்தரவாதத்தை இது வழங்குகிறது. பட்டியலில் உள்ள இடம் எதையும் மாற்றுவதில்லை: முதல் உள்ளீடும் கடைசி உள்ளீடும் ஒவ்வொரு குலுக்கலிலும் சமமான நிகழ்தகவைக் கொண்டுள்ளன.
'நகல்களைத் தவிர்க்கவும்' என்பது முற்றிலும் வேறுபட்ட இரண்டு வகையான குலுக்கல்களைப் பிரிக்கிறது, புள்ளிவிவரத் துறையில் இவை ஒவ்வொன்றுக்கும் ஒரு பெயர் உள்ளது. இது இயக்கப்பட்டிருக்கும்போது, இந்தக் கருவி Fisher-Yates அல்காரிதம் மூலம் உங்கள் பட்டியலின் நகலைக் கலைத்து, மேலிருந்து உள்ளீடுகளை எடுக்கிறது — இது, ஒரு பெட்டியிலிருந்து சீட்டுகளை எடுத்து மீண்டும் உள்ளே போடாமல் இருப்பதற்குச் சமமாகும்; இதனால் யாரும் இரண்டு முறை தேர்ந்தெடுக்கப்பட மாட்டார்கள் மற்றும் அந்த அளவிலான ஒவ்வொரு குழுவும் தேர்ந்தெடுக்கப்படுவதற்கான வாய்ப்பு சமமாக இருக்கும். அதுவே sampling without replacement ஆகும், மேலும் பரிசு வெற்றியாளர்கள், அணிகள் மற்றும் முறை வரிசைகளுக்கு உங்களுக்கு இதுதான் தேவைப்படும். இது அணைக்கப்பட்டிருக்கும்போது, ஒவ்வொரு தேர்வும் முழுப் பட்டியலிலிருந்தும் தன்னிச்சையாகச் செய்யப்படுகிறது, எனவே ஒரே உள்ளீடு ஒன்றுக்கு மேற்பட்ட முறை வரக்கூடும் — இது sampling with replacement ஆகும்; தொடர்ச்சியான குலுக்கல்கள் அல்லது விரைவான புள்ளிவிவர மாதிரி போல, ஒவ்வொரு சுற்றிலும் அனைவரும் தகுதி பெற்றிருக்க வேண்டும் எனும்போது உங்களுக்கு இது தேவைப்படும். இந்த இரண்டு முறைகளிலும் ஒன்று மற்றொன்றை விட நியாயமானது என்று கூற முடியாது; அவை வெவ்வேறு கேள்விகளுக்குப் பதிலளிக்கின்றன.
ஒரு நியாயமான குலுக்கல் பார்ப்பதற்கு நியாயமாகத் தெரியாது. பத்தில் ஐந்து பெயர்களைக் குலுக்கல் முறையில் எடுத்தால், அசல் பட்டியலில் ஒன்றோடொன்று அடுத்தடுத்து இருந்த இரண்டு தேர்வுகள் வருவதையோ, அல்லது நகல்கள் அனுமதிக்கப்படும்போது ஒரே பெயர் தொடர்ந்து இருமுறை வருவதையோ நீங்கள் அடிக்கடி காண்பீர்கள், இவை ஒவ்வொன்றும் சாதாரணமானதே. ஒவ்வொரு குலுக்கலும் தன்னிச்சையானது: முந்தைய தேர்வுகள் பிந்தையவற்றில் எவ்விதத் தாக்கத்தையும் ஏற்படுத்துவதில்லை, மேலும் எவரும் வெற்றியடைவதற்கு ஒருபோதும் 'கட்டாயம் வெல்ல வேண்டிய' முறை வருவதில்லை. இதற்கு மாறாக வலியுறுத்தும் உள்ளுணர்வு gambler's fallacy என்று அழைக்கப்படுகிறது, நாமே சீரற்ற முறையில் தேர்ந்தெடுக்கும்போது நம்மை மோசமாக்குவதும் இதே உள்ளுணர்வுதான் — சீரற்ற முறையில் தேர்ந்தெடுக்கச் சொன்னால், நாம் முதல் மற்றும் கடைசி உள்ளீட்டைத் தவிர்க்கிறோம், ஒரு பெயரைத் திரும்பக் கூறுவதைத் தவிர்க்கிறோம், மற்றும் அதிர்ஷ்டம் ஒருபோதும் செய்யாத அளவுக்கு நமது தேர்வுகளை மிகவும் சமமாகப் பரவச் செய்கிறோம். சந்தேகத்திற்குரிய வகையில் நேர்த்தியாகத் தோன்றும் முடிவு மனிதனின் கைரேகையாகும்; உண்மையான சீரற்ற தன்மை எப்போதும் கொத்துகளாகவே உருவாகும்.
இந்தச் சீரற்ற கருவியை ஏன் தேர்ந்தெடுக்க வேண்டும்?
- உலாவியில் மட்டுமே தேர்வு: உங்கள் பட்டியல் உங்கள் சாதனத்தில் படிக்கப்படுகிறது மற்றும் எங்கும் அனுப்பப்படுவதில்லை
- Web Crypto API சீரற்ற தன்மை: கிரிப்டோகிராஃபிக் முறையில் பாதுகாப்பானது, Math.random() அல்ல
- modulo bias இல்லை: rejection sampling ஒவ்வொரு உள்ளீட்டிற்கும் சமமான வாய்ப்பை அளிக்கிறது
- எந்தவொரு பட்டியல் வடிவமும்: ஒரு வரிக்கு ஒன்று, கமா அல்லது இடைவெளி மூலம், மறுவடிவமைப்பு இன்றி
- 'நகல்களைத் தவிர்க்கவும்' முறை: யாரும் இருமுறை தேர்ந்தெடுக்கப்படாமல் வெற்றியாளர்கள் அல்லது அணிகளைத் தேர்வுசெய்யுங்கள்
- 1000 உள்ளீடுகள் வரை, மற்றும் ஒரே குலுக்கலில் 100 தேர்வுகள் வரை
- உள்ளமைக்கப்பட்ட பட்டியல் கருவிகள்: கோப்பிலிருந்து ஏற்றுதல், கலைத்தல், வரிசைப்படுத்துதல், அழித்தல், மாதிரி தரவு
- வரலாறு மற்றும் கோப்பில் சேமி: நீங்கள் நியாயப்படுத்த வேண்டியிருக்கக் கூடிய குலுக்கலின் பதிவை வைத்திருங்கள்
- வரம்பற்றது மற்றும் இலவசம்: பதிவு தேவையில்லை, பயன்பாட்டு வரம்புகள் இல்லை, எங்கள் சர்வர்களில் எதுவும் இல்லை
ஒரு முடிவு எதிர்காலத்தில் கேள்விக்குள்ளாக்கப்படும்போதெல்லாம் சீரற்ற தேர்வு பயன்படுகிறது. ஆசிரியர்கள் எந்தவொரு பாரபட்சமும் இன்றி மாணவர்களை அழைத்து, ஒரு வகுப்பை திட்டக் குழுக்களாகப் பிரிக்கிறார்கள். லைவ் ஸ்ட்ரீமர்கள் மற்றும் சந்தைப்படுத்துபவர்கள், முடிவை நம்ப வேண்டிய கட்டாயத்திலிருக்கும் பார்வையாளர்களுக்கு முன்னால் பரிசு மற்றும் குலுக்கல் வெற்றியாளர்களை எடுக்கிறார்கள். யாரும் தாமாக முன்வந்து செய்ய விரும்பாத பணிகளை மேலாளர்கள் பகிர்ந்தளிக்கிறார்கள், மேலும் அணிகள் செயல்விளக்க வரிசையையோ அல்லது யார் தயார்நிலையில் இருக்க வேண்டும் என்பதையோ தீர்மானிக்கின்றன. தணிக்கை செய்வதற்காக ஆராய்ச்சியாளர்கள் பதிவுகளின் சீரற்ற மாதிரியை எடுக்கிறார்கள். குடும்பங்கள் எந்தத் திரைப்படத்தைப் பார்ப்பது என்று வாதிட்டு முடிக்கின்றன, மற்றும் பசியுள்ள நண்பர்கள் எந்த உணவகத்திற்குச் செல்வது என்பதைத் தேர்ந்தெடுக்கிறார்கள். இவை அனைத்திலும் பொதுவான விஷயம், பின்னர் எவராலும் விளக்கக் கூடிய ஒரு தேர்வாகும்: இந்தக் குலுக்கல் கிரிப்டோகிராஃபிக் சீரற்ற தன்மையைப் பயன்படுத்துகிறது, இது முழுவதுமாக உங்கள் சாதனத்திலேயே நிகழ்கிறது, மேலும் யாராவது அதைப் பற்றிப் பின்னர் கேட்டால், முடிவை 'வரலாறு' பாதுகாத்து வைத்திருக்கிறது.
கவனிக்க வேண்டிய சில நேர்மையான வரம்புகள் இதில் உள்ளன. உங்கள் பட்டியலில் உள்ளதை விட அதிகமான தனித்துவமான உள்ளீடுகளை இந்தக் கருவியால் எடுக்க முடியாது — மூன்று வெற்றியாளர்களுக்குக் குறைந்தது மூன்று பெயர்களாவது தேவை — மேலும் இது 200 எழுத்துகளைக் கொண்ட 1000 உள்ளீடுகளுடன் நின்றுவிடுகிறது, ஒரு குலுக்கலில் 100 தேர்வுகள் வரை செய்யலாம். 'கலைக்கவும்' மற்றும் 'வரிசைப்படுத்தவும்' ஆகியவை வரிக்கு வரி செயல்படுகின்றன, எனவே ஒரே வரியில் ஒட்டப்பட்ட கமாவால் பிரிக்கப்பட்ட பட்டியல் ஒரு வரிக்கு ஒரு உள்ளீடு என்றான பின்னரே அதன் வரிசை மாற்றப்படும்; மேலும் இவை இரண்டும் குலுக்கலுக்குப் பதிலாக பெட்டியையே வரிசைப்படுத்துகின்றன, உங்கள் உள்ளீடுகள் எந்த வரிசையில் இருந்தாலும் குலுக்கல் சமமாகவே நியாயமானதாக இருக்கும். ஒவ்வொரு உள்ளீடும் வடிவமைப்பின்படி சமமான எடையையே கொண்டுள்ளன, எனவே ஒரு குலுக்கலில் ஒரு பெயர் இருமடங்காகக் கணக்கிடப்பட வேண்டுமெனில், அந்தப் பெயர் இரண்டு முறை பட்டியலிடப்பட வேண்டும். இந்த வரம்புகளுக்குள் இதன் உத்தரவாதம் மிகவும் வலிமையானது — உங்கள் பட்டியலில் உள்ள ஒவ்வொரு உள்ளீடும், ஒவ்வொரு தனிப்பட்ட குலுக்கலிலும் சமமான வாய்ப்பைக் கொண்டுள்ளன.