टोपोलॉजिकल सॉर्ट एल्गोरिदम आपको विभिन्न अलग-अलग परिणाम ऑर्डर दे सकता है, इसलिए आप केवल पहले कुछ तत्व नहीं ले सकते हैं और उन्हें स्वतंत्र मान सकते हैं।
स्थलीय सॉर्टिंग के बजाय मैं आपके कार्यों को आने वाली निर्भरता किनारों की संख्या से क्रमबद्ध करने का सुझाव दूंगा। तो, उदाहरण के लिए यदि आपके ग्राफ में ए -> बी, ए -> सी, बी -> सी, डी -> सी है तो आप इसे ए [0], डी [0], बी [1] के रूप में सॉर्ट करेंगे। , सी [3] जहां [i] आने वाली किनारों की संख्या है।
स्थलीय सॉर्टिंग के साथ, आप ए, बी, डी, सी भी प्राप्त कर सकते हैं। उस स्थिति में, यह पता लगाना आसान नहीं होगा कि आप समानांतर में ए और डी निष्पादित कर सकते हैं।
ध्यान दें कि एक कार्य के बाद पूरी तरह से संसाधित होने के बाद, शेष कार्यों को विशेष रूप से अपडेट करना होगा, जो कि समाप्त कार्य पर निर्भर थे। हालांकि, यदि किसी कार्य में आने वाली निर्भरताओं की संख्या अपेक्षाकृत छोटी संख्या तक सीमित है (कुछ सैकड़ों कहें), तो आप आसानी से रेडिक्स/बाल्टी-सॉर्ट जैसे कुछ पर भरोसा कर सकते हैं और सॉर्ट स्ट्रक्चर को निरंतर समय में अपडेट कर सकते हैं।
इस दृष्टिकोण के साथ, एक बार समानांतर कार्य समाप्त होने के बाद, आप आसानी से नए कार्य भी शुरू कर सकते हैं। बस निर्भरता गणनाओं को अपडेट करें, और उन सभी कार्यों को शुरू करें जिनके पास अब आने वाली निर्भरताएं हैं।
ध्यान दें कि यह दृष्टिकोण मानता है कि आपके पास उन सभी कार्यों को संसाधित करने के लिए पर्याप्त प्रोसेसिंग पावर है जिन पर एक ही समय पर निर्भरता नहीं है। यदि आपके पास प्रोसेसिंग समय के मामले में इष्टतम समाधान के लिए सीमित संसाधन और देखभाल है, तो आपको अधिक प्रयास करना होगा, क्योंकि समस्या एनपी-हार्ड बन जाती है (जैसा कि पहले से ही उल्लेख किया गया है)।
तो अपने मूल प्रश्न का उत्तर देने के लिए: हाँ, आप मूल रूप से सही हैं, हालांकि, आपको समझाने की कमी नहीं है कि उन स्वतंत्र कार्यों को कुशलता से कैसे निर्धारित किया जाए (ऊपर मेरा उदाहरण देखें)।
निर्भर कार्य निष्पादित करने से पहले समानांतर में प्रत्येक निर्भरता को दोबारा निष्पादित करने के बारे में कैसे? आपको यह सुनिश्चित करने के लिए कुछ बहीखाता की आवश्यकता होगी कि प्रत्येक कार्य केवल एक बार निष्पादित हो, लेकिन अन्यथा यह सरल और कुशल लगता है। –