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

जावास्क्रिप्ट डीएफएस का उपयोग करके टोपोलॉजिकल सॉर्टिंग


एक निर्देशित ग्राफ का एक टोपोलॉजिकल सॉर्ट या टोपोलॉजिकल ऑर्डरिंग इसके शीर्षों का एक रैखिक क्रम है जैसे कि प्रत्येक निर्देशित किनारे के लिए यूवी से वर्टेक्स यू से वर्टेक्स वी तक, यू ऑर्डरिंग में वी से पहले आता है। यह केवल निर्देशित ग्राफ़ में समझ में आता है।

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

उदाहरण

 /** * CS101 CS102 * / \ / * CS204 CS340 * \ /| \ * CS380 | CS410 * \ | / * CS540*/

उपरोक्त ग्राफ़ में, विचार करें कि क्या आप पाठ्यक्रम को एक स्तर पर लेना चाहते हैं, आपको पहले उन सभी पाठ्यक्रमों को लेना होगा जिनसे यह ऊपर के स्तर से जुड़ा हुआ है। उपरोक्त ग्राफ़ के लिए कुछ संभावित टोपोलॉजिकल प्रकार निम्नलिखित हैं -

CS101 -> CS204 -> CS102 -> CS340 -> CS410 -> CS380 -> CS540CS102 -> CS101 -> CS340 -> CS204 -> CS410 -> CS380 -> CS540

आइए इसे जावास्क्रिप्ट में लागू करें। हम ग्राफ़ को पुनरावर्ती रूप से चिह्नित करने और एक्सप्लोर करने में मदद करने के लिए 2 फ़ंक्शन, टोपोलॉजिकल सॉर्ट और टोपोलॉजिकलसॉर्ट हेल्पर लिखेंगे।

उदाहरण

 टोपोलॉजिकलसॉर्ट हेल्पर (नोड, एक्सप्लोर, एस) {एक्सप्लोर.एड (नोड); // इस नोड को विज़िट के रूप में चिह्नित करता है और नोड्स पर जाता है // जो इस नोड पर निर्भर हैं, किनारा नोड है ----> n this.edges[node].forEach(n => {if (!explored. है (एन)) {this.topologicalSortHelper (एन, एक्सप्लोर, एस); }}); // इस नोड के लिए सभी निर्भरताएं हल हो गई हैं, अब हम इसे स्टैक में जोड़ सकते हैं। s.push(node);}topologicalSort() { // क्रमबद्ध क्रम में सभी तत्वों का ट्रैक रखने के लिए एक स्टैक बनाएं s =new Stack(this.nodes.length); चलो पता लगाया =नया सेट (); // हमारे ग्राफ में प्रत्येक न देखे गए नोड के लिए, हेल्पर को कॉल करें। this.nodes.forEach(नोड => { अगर (!explored.has(node)) {this.topologicalSortHelper(node, explored, s); }}); जबकि (!s.isEmpty ()) { कंसोल.लॉग (s.pop ()); }} 

आप इसका परीक्षण कर सकते हैं -

उदाहरण

चलो g =नया ग्राफ़ ();g.addNode("A");g.addNode("B");g.addNode("C");g.addNode("D");g.addNode ("ई");g.addNode("F");g.addNode("G");g.addDirectedEdge("A", "C");g.addDirectedEdge("A", "B"); g.addDirectedEdge("A", "D");g.addDirectedEdge("C", "D");g.addDirectedEdge("D", "E");g.addDirectedEdge("E", "F" );g.addDirectedEdge("B", "G");g.topologicalSort();

हमारे द्वारा बनाया गया ग्राफ़ ऐसा दिखता है -

उदाहरण

/** * ए * / | \ * सी | बी * \ | | *डी जी* | *ई* | * एफ*/

आउटपुट

यह आउटपुट देगा -

एबीजीसीडीईएफ

  1. फायरबग का उपयोग करके जावास्क्रिप्ट को डिबग करना

    डिबगिंग दोषों को दूर करने की व्यवस्थित विधि है। यह सब परीक्षण मामलों के निष्पादन के साथ शुरू होता है। जब भी परीक्षण मामलों को निष्पादित किया जाता है, वास्तविक परिणामों की तुलना अपेक्षित परिणामों से की जाती है। यदि वास्तविक परिणामों और अपेक्षित परिणामों के बीच पत्राचार की कोई कमी है, तो मूल कारण विश्

  1. जावास्क्रिप्ट आयात में '{ }' का उपयोग करना?

    जावास्क्रिप्ट आयात में {} का उपयोग करने वाला कोड निम्नलिखित है - उदाहरण दस्तावेज़ बॉडी { फॉन्ट-फ़ैमिली:सेगो यूआई, ताहोमा, जिनेवा, वर्दाना, सेन्स-सेरिफ़; } .result {फ़ॉन्ट-आकार:18पीएक्स; फ़ॉन्ट-वजन:500; रंग:रेबेकापर्पल; }जावास्क्रिप्ट आयात में { } का उपयोग करनायहां क्लिक करेंआयातित फ़ंक्शन को निष्पाद

  1. टोपोलॉजिकल सॉर्टिंग

    निर्देशित चक्रीय ग्राफ के लिए टोपोलॉजिकल छँटाई शीर्षों का रैखिक क्रम है। निर्देशित ग्राफ़ के प्रत्येक किनारे U-V के लिए, शीर्ष u क्रम में vertex v से पहले आएगा। जैसा कि हम जानते हैं कि स्रोत शीर्ष गंतव्य शीर्ष के बाद आएगा, इसलिए हमें पिछले तत्वों को संग्रहीत करने के लिए एक स्टैक का उपयोग करने की