एल्गोरिदम और डेटा संरचनाओं को समझना आपके प्रदर्शन को अपने साथियों की तुलना में 10 गुना अधिक बढ़ाने के लिए महत्वपूर्ण है जो नहीं करते हैं। ऐसा इसलिए है क्योंकि आप समस्याओं का गंभीर रूप से विश्लेषण करते हैं और उन्हें हल करने के लिए सर्वोत्तम साधन तैयार करते हैं। इसका मतलब सर्वर अनुरोध समय को तेज करना या न्यूनतम डिस्क स्थान के साथ बड़े डेटा सेट को स्टोर करने का सबसे अच्छा तरीका खोजना हो सकता है।
इस लेख का उद्देश्य आपको एल्गोरिदम और डेटा संरचनाओं की बुनियादी अवधारणाओं को समझने में मदद करना है और जावास्क्रिप्ट का उपयोग करके उन्हें कैसे लागू करना है।
एक एल्गोरिदम क्या है? एक एल्गोरिथ्म एक कार्य को पूरा करने के लिए निर्देशों का एक चरण-दर-चरण सेट है। मान लीजिए कि आपको जल्दी उठने में समस्या होती है और आप समय सीमा को याद करते रहते हैं। इसे आप कैसे हल करते हैं? आह! अलार्म सेट करें। यह वही है जो एक एल्गोरिदम जैसा दिखता है।
दूसरी ओर, डेटा संरचनाएं डेटा को कुशलतापूर्वक संग्रहीत करने के तरीके हैं।
डेटा संरचनाएं और एल्गोरिदम (डीएसए) इतने महत्वपूर्ण हैं कि वे कंप्यूटर के समग्र प्रदर्शन के लिए महत्वपूर्ण हैं। आपके द्वारा चुना गया एल्गोरिथम इसके चलने का समय (बिग ओ नोटेशन) या इसकी दक्षता निर्धारित करेगा। कुछ लोकप्रिय डीएसए बाइनरी सर्च, रिकर्सन, सॉर्टिंग, एरेज़, लिंक्ड लिस्ट और हैश टेबल हैं।
मान लीजिए आप किसी देश की निर्देशिका में नाम खोज रहे हैं; यह एक जे के साथ शुरू होता है। आप शुरुआत में ("ए" देशों से) शुरू कर सकते हैं और जब तक आप देशों की "जे" सूची तक नहीं पहुंच जाते (इन देशों को वर्णानुक्रम में क्रमबद्ध किया जाता है) तक पृष्ठों को फ़्लिप करते रहें। यदि देश "Z" से शुरू होता है, तो आप निर्देशिका के अंत तक फ़्लिप करते रहते हैं। इसे एक साधारण खोज एल्गोरिथम के रूप में जाना जाता है। लेकिन कल्पना कीजिए कि अगर यह एक फोन बुक निर्देशिका होती जिसमें 100,000 से अधिक फोन नंबर होते, तो यह अकल्पनीय रूप से कठिन होता है। आप इसे कैसे ऑप्टिमाइज़ करते हैं? बचाव के लिए द्विआधारी खोज।
बाइनरी सर्च एल्गोरिथम इनपुट के रूप में तत्वों की एक क्रमबद्ध सूची लेता है, और यदि आप जिस तत्व की तलाश कर रहे हैं वह सूची में है, तो बाइनरी सर्च उस स्थिति को लौटाता है जहां यह स्थित है, अन्यथा यह शून्य हो जाता है। जापान जाने के लिए कदम दर कदम जाने के बजाय, द्विआधारी खोज इस सरणी को कई भागों में विभाजित करती है और उनमें से प्रत्येक को तदनुसार खोजती है।
इस तरह, खोज तेज है।
वे एक कुंजी द्वारा अनुक्रमित तत्वों का संग्रह हैं। संग्रह में एक पहचानकर्ता के रूप में कार्य करने वाली कुंजी के साथ, सरणी तत्वों को क्रमिक रूप से संग्रहीत किया जाता है। इसकी अनुक्रमणिका 0 से शुरू होती है।
वे सुपर उपयोगी हैं क्योंकि किसी भी तत्व को पुनः प्राप्त करने या छांटने में निरंतर समय O(1) लगता है। इसका उपयोग कई अन्य डेटा संरचनाओं को लागू करने के लिए भी किया जा सकता है जो डेटा में हेरफेर करने के तरीके पर अतिरिक्त प्रतिबंध लगाते हैं। उदाहरण के लिए, एक स्ट्रिंग को वर्णों की एक सरणी के रूप में लागू किया जा सकता है।
यहाँ जावास्क्रिप्ट में सरणियों और बाइनरी खोज का कार्यान्वयन है।
function binary_search(list, item) { let guess = list.find(element => element == item); if (guess) { return guess + "\ncountry index no: " + list.findIndex(country => country === guess); } return null + ": element is not in the array" } console.log(binary_search(country_list, 'Japan')); // Japan | country index no: 109 console.log(binary_search(country_list, 'Cookie')); // null: element is not in the array
छँटाई शायद ही कभी प्रोग्रामर द्वारा उपयोग की जाती है। यह ज्यादातर पहले से ही उस भाषा या पुस्तकालयों द्वारा नियंत्रित किया जाता है जिसमें वे कोड करते हैं। जावास्क्रिप्ट भाषा, उदाहरण के लिए, सम्मिलन प्रकार, ढेर सॉर्ट, या त्वरित सॉर्ट का उपयोग करके सरणी को सॉर्ट करती है।
हीपसॉर्ट जावास्क्रिप्ट सरणी-फ़िल्टर विधि के समान है। यह इनपुट को एक क्रमबद्ध क्षेत्र और एक अवर्गीकृत क्षेत्र में विभाजित करता है और तत्वों को क्रमबद्ध रूप से क्रमबद्ध क्षेत्र में ले जाता है। यहाँ एक उदाहरण है;
एक लिंक्ड सूची एक डेटा संरचना है जहां प्रत्येक तत्व में सूची में अगले तत्व के लिए डेटा और पॉइंटर दोनों होते हैं। एक लिंक्ड सूची की एक विशिष्ट विशेषता यह है कि इसके आइटम स्मृति में कहीं भी बिखरे जा सकते हैं। यह सरणियों के लिए सच नहीं है। नीचे कुछ उदाहरण देखें;
हैश टेबल एक सरणी में मनमाने तत्वों की सूची है। संग्रहीत किए जाने वाले तत्व या इसकी कुंजी का उपयोग सरणी में अनुक्रमणिका के रूप में किया जाता है। यहाँ एक उदाहरण है:
हैश फ़ंक्शन तत्वों की कुंजी को हैश में परिवर्तित करता है, फिर हैश किए गए तत्वों को तालिका में एक निर्दिष्ट स्थान पर मैप करता है। इनमें से प्रत्येक तत्व तालिका में मनमानी तत्वों की उप-सरणी भी हो सकता है।
रिकर्सन एक कोडिंग तकनीक है जिसका उपयोग कई अन्य एल्गोरिदम में किया जाता है। यह लंबे कोड का एक शॉर्टकट है और प्रोग्रामर को छोड़कर किसी भी प्रदर्शन लाभ की पेशकश नहीं कर सकता है।
मान लीजिए आपको एक खजाना सूटकेस मिला। इस मामले को अनलॉक करने के लिए, आपको अन्य छोटे बक्से वाले बॉक्स से एक कुंजी को पकड़ना होगा, जिसमें अभी भी अन्य बॉक्स हो सकते हैं।
एक तरीका यह है कि खोजने के लिए बक्सों की ढेर सूची बनाई जाए, फिर इनमें से प्रत्येक बॉक्स को देखें। अगर आपको कोई चाबी मिल जाए, तो बढ़िया! यदि नहीं, तो बाद में खोजने के लिए नया खाली बॉक्स पाइल सूची में जोड़ें।
रिकर्सन उस चरण को हटा देता है जहां आप खोज सूची में नया खाली बॉक्स मिलाते हैं। यह नए खाली पाए गए बॉक्स पर तुरंत खोज विधि को कॉल करता है। जावास्क्रिप्ट में एक उदाहरण यहां दिया गया है;
const suitCase = new Map(); suitCase.set('box-0', '') .set('box-1', '') .set('box-2', '') .set('box-3', '') .set('box-4', 'key') .set('box-5', '') .set('box-6', ''); function search (suit) { for (let [key, value] of suit) { if (value === 'key') { console.log(`Found ${value} at ${key}!`); } } } search(suitCase); // prints Found key at box-4!
आपको चाबी मिल गई, टाडा!
संक्षेप में, डीएसए एक प्रोग्रामर के रूप में प्रभावी ढंग से सोचने का एक शानदार तरीका है। यह आपको कठिन समस्याओं को हल करने के लिए उपकरण देता है। इस आलेख में उपयोग किए गए सभी कोड स्निपेट डाउनलोड करने के लिए GitHub रिपॉजिटरी लिंक पर क्लिक करें। हैप्पी हैकिंग!
छवि कॉपीराइट द्वारा: मैनिंग प्रकाशन, adit.io द्वारा तैयार किया गया