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

JavaScript में फिशर-येट्स शफल (Fisher-Yates shuffle) क्या है?


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

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

पालन करने योग्य चरण

  • इस एल्गोरिदम के अनुसार हमें सरणी को पीछे से आगे की ओर लूप करना चाहिए। उदाहरण के लिए, निम्न उदाहरण में, हमारे पास 8 तत्वों (A,B,C,D,E,F,G,H) वाली एक सरणी है जो इंडेक्स 0 से इंडेक्स 7 तक है। तो पहला लूप पास इंडेक्स 7 पर मौजूद तत्व H को प्रभावित करेगा।
  • अगला चरण चयनित इंडेक्स 7 और इंडेक्स 0 के बीच एक रैंडम नंबर (रैंडम इंडेक्स) उत्पन्न करना है। मान लीजिए रैंडम इंडेक्स 3 है।
  • रैंडम इंडेक्स प्राप्त करने के बाद चयनित इंडेक्स और रैंडम इंडेक्स पर मौजूद तत्वों को स्वैप करें। प्रदान की गई सरणी में रैंडम इंडेक्स पर मौजूद तत्व D है। स्वैप करने के बाद सरणी A,B,C,H,E,G,F,D में बदल जाएगी।
  • दूसरे लूप पास में केवल अंतिम इंडेक्स को अनदेखा करें (क्योंकि यह पहले ही लूप हो चुका है) और इंडेक्स 0 और इंडेक्स 6 के बीच रैंडम इंडेक्स खोजने का प्रयास करें, यानी तत्वों A और F के बीच। मान लीजिए उत्पन्न रैंडम इंडेक्स 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  // ध्यान दें कि आउटपुट हर पुनरावृत्ति के लिए बदल जाएगा।

  1. - JavaScript में ऐरे को रैंडम तरीके से कैसे शफ़ल करें

    _.shuffle() _.shuffle underscore.js से संबंधित एक फंक्शन है, जो JavaScript का एक फ्रेमवर्क है। यह फंक्शन वास्तव में एलिमेंट्स को रैंडम तरीके से शफ़ल करने के लिए Fisher-Yates shuffle एल्गोरिथ्म का उपयोग करता है। सिंटैक्स _.shuffle(array); यह मेथड पैरामीटर के रूप में एक ऐरे लेता है और एलिमेंट्स को रै

  1. JavaScript Random नंबर JavaScript Random नंबर

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

  1. - JavaScript ऐरे में रैंडम आइटम को कैसे सब्स्टीट्यूट करें?

    रैंडम आइटम को सब्स्टीट्यूट करने के लिए, random() के साथ map() का उपयोग करें। उदाहरण निम्नलिखित कोड है: function substituteRandomValue(names, size) { return function () { const index = new Set(); do { index.add(Math.floor(Math.random() * names.length)); } whil