फिशर-येट्स फेरबदल एल्गोरिथम
यह एल्गोरिथम एक सरणी में तत्वों को फेरबदल करना है। तत्वों को एक सरणी में फेरबदल करने के लिए हम अपना तर्क लिख सकते हैं, लेकिन कई डेवलपर्स सोचते हैं कि 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.