एक निर्देशित ग्राफ का एक टोपोलॉजिकल सॉर्ट या टोपोलॉजिकल ऑर्डरिंग इसके शीर्षों का एक रैखिक क्रम है जैसे कि प्रत्येक निर्देशित किनारे के लिए यूवी से वर्टेक्स यू से वर्टेक्स वी तक, यू ऑर्डरिंग में वी से पहले आता है। यह केवल निर्देशित ग्राफ़ में समझ में आता है।
ऐसे कई स्थान हैं जहां टोपोलॉजिकल सॉर्ट बहुत मायने रखता है। उदाहरण के लिए, मान लीजिए कि आप किसी रेसिपी को फॉलो कर रहे हैं, इसमें कुछ स्टेप्स हैं जो अगले स्टेप्स पर जाने के लिए जरूरी हैं। लेकिन इनमें से कुछ समानांतर में किए जा सकते हैं। इसी तरह, कॉलेज के दौरान पाठ्यक्रमों का चयन करते समय, अधिक उन्नत पाठ्यक्रमों के लिए कुछ पूर्वापेक्षाएँ होती हैं जो स्वयं आगे के पाठ्यक्रमों के लिए पूर्वापेक्षाएँ हो सकती हैं। उदाहरण के लिए -
उदाहरण
/** * 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();हमारे द्वारा बनाया गया ग्राफ़ ऐसा दिखता है -
उदाहरण
/** * ए * / | \ * सी | बी * \ | | *डी जी* | *ई* | * एफ*/आउटपुट
यह आउटपुट देगा -
एबीजीसीडीईएफ