Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

फिशर-येट्स जावास्क्रिप्ट में फेरबदल क्या है?

<घंटा/>

फिशर-येट्स फेरबदल एल्गोरिथम

यह एल्गोरिथम एक सरणी में तत्वों को फेरबदल करना है। तत्वों को एक सरणी में फेरबदल करने के लिए हम अपना तर्क लिख सकते हैं, लेकिन कई डेवलपर्स सोचते हैं कि F ईशर-येट्स आधुनिक फेरबदल एल्गोरिथ्म एक सरणी में तत्वों को फेरबदल करने का सबसे अच्छा तरीका है। इस एल्गोरिथम में निम्नलिखित चरण हैं।

अनुसरण करने के लिए चरण

  • इस एल्गोरिथम के अनुसार हमें ऐरे को पीछे से आगे की ओर लूप करना चाहिए। उदाहरण के लिए, निम्नलिखित उदाहरण में, हमारे पास इंडेक्स 0 से इंडेक्स 7 तक 8 तत्वों (ए, बी, सी, डी, ई, एफ, जी, एच) से युक्त एक सरणी है। तो पहला लूप पास तत्व को प्रभावित करेगा अंतिम अनुक्रमणिका 7 यानी H.
  • अगला चरण चयनित अनुक्रमणिका 7 और अनुक्रमणिका 0 के बीच एक यादृच्छिक संख्या (यादृच्छिक अनुक्रमणिका) उत्पन्न करना है। मान लीजिए कि यादृच्छिक अनुक्रमणिका 3 है।
  • रैंडम इंडेक्स प्राप्त करने के बाद उन तत्वों को स्वैप करें जो चयनित इंडेक्स और रैंडम इंडेक्स में हैं। दिए गए एरे में रैंडम इंडेक्स पर एलिमेंट डी है। इसलिए स्वैपिंग के बाद, एरे को ए, बी, सी में बदल दिया जाएगा। , एच, ई, जी, एफ, डी।
  • दूसरे लूप पास में केवल अंतिम इंडेक्स को अनदेखा करें (क्योंकि यह पहले से ही लूप है) और इंडेक्स 0 और इंडेक्स 6 के बीच रैंडम इंडेक्स खोजने की कोशिश करें जो कि ए और एफ तत्वों के बीच है। उत्पन्न रैंडम इंडेक्स को 2 होने दें।
  • यादृच्छिक अनुक्रमणिका प्राप्त करने के बाद 6 और 2 पर अनुक्रमणिका पर तत्वों को स्वैप करें। अब सरणी A,B,F,H,E,G,C,D के रूप में दिखाई देगी।
  • यह एल्गोरिथम उसी पैटर्न का अनुसरण करता है कि यह इंडेक्स 6 को अनदेखा करता है और इंडेक्स 5 और इंडेक्स 0 के बीच यादृच्छिक इंडेक्स ढूंढना शुरू करता है और इसी तरह जब तक यह इंडेक्स 1 तक नहीं पहुंच जाता है। यह इंडेक्स 0 को लूप में नहीं ले सकता क्योंकि कोई इंडेक्स नहीं है स्वैपिंग उद्देश्य के लिए 0 से कम।
  • ध्यान दें कि एक संभावना है कि उत्पन्न यादृच्छिक सूचकांक लूप इंडेक्स का चयन किया जा सकता है। उदाहरण के लिए, लूप को चयनित इंडेक्स 4 और इंडेक्स 0 के बीच चलने दें। रैंडम इंडेक्स को 4 होने दें। फिर इंडेक्स 4 का मान उसी स्थिति में रहेगा।

निम्न उदाहरण फिशर-येट्स को दर्शाता है आधुनिक फेरबदल एल्गोरिथम

उदाहरण

<html>
<body>
<script>
   var arr = ['A','B','C','D','E','F','G','H']
   var i = arr.length, k , temp;      // k is to generate random index and temp is to swap the values
   while(--i > 0){
      k = Math.floor(Math.random() * (i+1));
      temp = arr[k];
      arr[k] = arr[i];
      arr[i] = temp;
   }
   document.write(arr);
</script>
</body>
</html>

आउटपुट

C,F,H,D,A,G,E,B  // note that output will change for every iteration.

  1. कैसे जावास्क्रिप्ट में एक यादृच्छिक तरीके से एक सरणी फेरबदल करने के लिए?

    _.shuffle() _.फेरबदल एक फ़ंक्शन है जो underscore.js से संबंधित है , एक ढांचा जावास्क्रिप्ट का। यह फ़ंक्शन वास्तव में फिशर-येट्स फेरबदल . को नियोजित करता है तत्वों को यादृच्छिक तरीके से फेरबदल करने के लिए एल्गोरिदम। वाक्यविन्यास _.shuffle(array); यह विधि एक पैरामीटर के रूप में एक सरणी लेती है और

  1. जावास्क्रिप्ट रैंडम

    Math.random() फ़ंक्शन का उपयोग 0 और 1 के बीच एक यादृच्छिक फ़्लोटिंग-पॉइंट संख्या उत्पन्न करने के लिए किया जाता है। Math.random() फ़ंक्शन के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="

  1. एक जावास्क्रिप्ट सरणी में यादृच्छिक वस्तुओं को प्रतिस्थापित करें?

    यादृच्छिक वस्तुओं को प्रतिस्थापित करने के लिए, मानचित्र () के साथ यादृच्छिक () का उपयोग करें। उदाहरण निम्नलिखित कोड है - function substituteRandomValue(names, size) {    return function () {       const index = new Set();       do {