Skip to main content
CheckTown
जेनरेटर

लिस्ट रैंडमाइज़र: Fisher-Yates एल्गोरिदम के साथ आइटम को निष्पक्ष रूप से शफ़ल करें

प्रकाशित 5 मिनट का पठन
इस लेख में

सूची यादृच्छिकीकरण क्या है?

सूची यादृच्छिकीकरण किसी सूची की वस्तुओं को यादृच्छिक क्रम में पुनर्व्यवस्थित करने की प्रक्रिया है, जिसे फेरबदल (shuffling) भी कहते हैं। एक उचित फेरबदल हर संभव क्रमचय को समान संभावना के साथ उत्पन्न करता है, जिससे यह सुनिश्चित होता है कि कोई भी वस्तु किसी विशेष स्थान पर आने की अधिक संभावना नहीं रखती। यह निष्पक्षता गुण यादृच्छिक असाइनमेंट, इनाम ड्रॉ और वैज्ञानिक नमूनाकरण जैसे अनुप्रयोगों के लिए महत्वपूर्ण है।

यादृच्छिकीकरण छँटाई (sorting) से अलग है — छँटाई किसी तुलना फ़ंक्शन के आधार पर एक निश्चित परिणाम देती है, जबकि यादृच्छिकीकरण हर बार एक अलग परिणाम देता है। किसी फेरबदल की गुणवत्ता एल्गोरिदम और उपयोग किए गए यादृच्छिकता के स्रोत, दोनों पर निर्भर करती है।

Fisher-Yates एल्गोरिदम कैसे काम करता है

Fisher-Yates फेरबदल (जिसे Knuth फेरबदल भी कहते हैं) समान रूप से यादृच्छिक क्रमचय उत्पन्न करने का मानक एल्गोरिदम है। यह सूची में अंतिम element से पहले तक दोहराव करते हुए काम करता है, और प्रत्येक element को शेष बिना-फेरबदल किए हिस्से से यादृच्छिक रूप से चुने गए element के साथ अदल-बदल करता है।

  • अंतिम element से शुरू करें — 0 से n-1 तक एक यादृच्छिक अनुक्रमांक चुनें और अंतिम element को उस अनुक्रमांक वाले element के साथ अदल-बदल करें
  • अंतिम से पहले वाले element पर जाएँ — 0 से n-2 तक एक यादृच्छिक अनुक्रमांक चुनें और अदल-बदल करें; पीछे की ओर बढ़ते हुए हर स्थान के लिए दोहराएँ
  • प्रत्येक element को ठीक एक बार छुआ जाता है — एल्गोरिदम O(n) समय में चलता है, जिससे यह हज़ारों वस्तुओं वाली बड़ी सूचियों के लिए भी कुशल है

निःशुल्क आज़माएँ — कोई साइनअप आवश्यक नहीं

एक सूची यादृच्छिक करें →

सामान्य उपयोग के मामले

सूची यादृच्छिकीकरण कई ऐसी स्थितियों में इस्तेमाल किया जाता है जहाँ निष्पक्ष, पक्षपात-रहित क्रम महत्वपूर्ण होता है।

  • यादृच्छिक असाइनमेंट — A/B परीक्षण, कक्षा गतिविधियों या प्रयोग के नियंत्रण/उपचार समूहों के लिए प्रतिभागियों को बिना पक्षपात के समूहों में विभाजित करें
  • इनाम ड्रॉ और उपहार — विजेताओं को निष्पक्ष रूप से चुनने के लिए प्रतिभागियों के नाम फेरबदल करें, जिससे हर प्रतिभागी को समान अवसर मिले
  • परीक्षा प्रश्नों का क्रम — शैक्षिक स्थितियों में नकल कम करने के लिए परीक्षा प्रश्नों को यादृच्छिक करें; हर छात्र प्रश्नों को अलग क्रम में देखता है
  • प्लेलिस्ट और कंटेंट फेरबदल — हर बार एक नए अनुभव के लिए गानों, कार्यों, फ्लैशकार्ड या पठन सूचियों को पुनर्व्यवस्थित करें

सुझाव और बेहतरीन प्रथाएँ

इन दिशानिर्देशों का पालन करके सूची यादृच्छिकीकरण से निष्पक्ष और पुनरुत्पादनीय परिणाम प्राप्त करें।

  • एक सिद्ध एल्गोरिदम का उपयोग करें — Fisher-Yates स्वर्ण मानक है; यादृच्छिक तुलनाकर्ता से छँटाई जैसे अनगढ़ तरीकों से बचें, जो पक्षपाती परिणाम देते हैं
  • छद्म-यादृच्छिकता को समझें — browser-आधारित यादृच्छिककर्ता छद्म-यादृच्छिक संख्या जनरेटर (Math.random या crypto.getRandomValues) का उपयोग करते हैं; क्रिप्टोग्राफिक अनुप्रयोगों के लिए हमेशा एक सुरक्षित यादृच्छिक स्रोत का उपयोग करें
  • दोहरावों को जानबूझकर संभालें — यदि आपकी सूची में दोहराए गए मान हैं, तो फेरबदल के दौरान हर दोहराव को एक अलग वस्तु माना जाता है; यदि आपको केवल अद्वितीय वस्तुएँ चाहिए तो पहले दोहराव हटा दें

अक्सर पूछे जाने वाले सवाल

क्या Fisher-Yates फेरबदल वाकई निष्पक्ष है?

हाँ, जब इसे किसी समान यादृच्छिक स्रोत के साथ सही ढंग से लागू किया जाए, तो Fisher-Yates फेरबदल हर संभव क्रमचय को ठीक समान संभावना के साथ उत्पन्न करता है। यह गणितीय रूप से सिद्ध हो चुका है। मुख्य आवश्यकता यह है कि यादृच्छिक संख्या जनरेटर समान मान उत्पन्न करे — प्रत्येक अनुक्रमांक के चुने जाने की संभावना समान होनी चाहिए।

क्या मैं वही फेरबदल परिणाम पुनरुत्पादित कर सकता हूँ?

किसी फेरबदल को पुनरुत्पादित करने के लिए, आपको एक seeded यादृच्छिक संख्या जनरेटर चाहिए — एक ही seed मान से आरंभ किया गया जनरेटर यादृच्छिक संख्याओं का वही अनुक्रम उत्पन्न करता है। अधिकांश browser-आधारित टूल बिना-seed वाले जनरेटर का उपयोग करते हैं, इसलिए हर फेरबदल अद्वितीय होता है। पुनरुत्पादनीयता के लिए, ऐसी प्रोग्रामिंग लाइब्रेरी का उपयोग करें जो seeded PRNGs का समर्थन करती हो।

सूची में दोहराई गई वस्तुओं के साथ क्या होता है?

दोहराई गई वस्तुओं को अद्वितीय वस्तुओं की तरह ही स्वतंत्र रूप से फेरबदल किया जाता है। यदि आपकी सूची में 'Apple' तीन बार है, तो हर उदाहरण को एक यादृच्छिक स्थान पर रखा जाएगा। एल्गोरिदम हर वस्तु को array में उसके स्थान के अनुसार मानता है, उसके मान के अनुसार नहीं। यदि आप फेरबदल से पहले दोहराव हटाना चाहते हैं, तो पहले अपनी सूची से दोहराव हटा दें।

संबंधित टूल