2011-09-27 14 views
5

समस्या विवरण:ग्राफ़ समस्याओं में समांतरता-प्रोग्रामिंग को कैसे लागू करें?

वहाँ n tasks है, और इन कार्यों, one might be dependent on the others, जिसका अर्थ है अगर एक बी पर निर्भर है, तो बी से पहले एक समाप्त हो जाता है समाप्त हो जाना चाहिए।

1. इन कार्यों को जितनी जल्दी हो सके खत्म करने का एक तरीका खोजें?

2.if take parallelism into account, इन कार्यों को पूरा करने के लिए प्रोग्राम को कैसे डिज़ाइन किया जाए?

प्रश्न:

जाहिर है, पहले सवाल का जवाब है, संस्थानिक-तरह इन कार्यों, फिर उन्हें इसी क्रम में खत्म।

लेकिन समांतरता को ध्यान में रखते हुए नौकरी कैसे करें?

मेरा जवाब था, पहली संस्थानिक-तरह इन कार्यों, तो उन कार्यों के लिए जो स्वतंत्र हैं लेने और उन्हें पहले खत्म, फिर ले सकते हैं और बाकी हिस्सों में उन स्वतंत्र लोगों को खत्म ...

मैं सही हूँ?

+0

निर्भर कार्य निष्पादित करने से पहले समानांतर में प्रत्येक निर्भरता को दोबारा निष्पादित करने के बारे में कैसे? आपको यह सुनिश्चित करने के लिए कुछ बहीखाता की आवश्यकता होगी कि प्रत्येक कार्य केवल एक बार निष्पादित हो, लेकिन अन्यथा यह सरल और कुशल लगता है। –

उत्तर

4

टोपोलॉजिकल सॉर्ट एल्गोरिदम आपको विभिन्न अलग-अलग परिणाम ऑर्डर दे सकता है, इसलिए आप केवल पहले कुछ तत्व नहीं ले सकते हैं और उन्हें स्वतंत्र मान सकते हैं।

स्थलीय सॉर्टिंग के बजाय मैं आपके कार्यों को आने वाली निर्भरता किनारों की संख्या से क्रमबद्ध करने का सुझाव दूंगा। तो, उदाहरण के लिए यदि आपके ग्राफ में ए -> बी, ए -> सी, बी -> सी, डी -> सी है तो आप इसे ए [0], डी [0], बी [1] के रूप में सॉर्ट करेंगे। , सी [3] जहां [i] आने वाली किनारों की संख्या है।

स्थलीय सॉर्टिंग के साथ, आप ए, बी, डी, सी भी प्राप्त कर सकते हैं। उस स्थिति में, यह पता लगाना आसान नहीं होगा कि आप समानांतर में ए और डी निष्पादित कर सकते हैं।

ध्यान दें कि एक कार्य के बाद पूरी तरह से संसाधित होने के बाद, शेष कार्यों को विशेष रूप से अपडेट करना होगा, जो कि समाप्त कार्य पर निर्भर थे। हालांकि, यदि किसी कार्य में आने वाली निर्भरताओं की संख्या अपेक्षाकृत छोटी संख्या तक सीमित है (कुछ सैकड़ों कहें), तो आप आसानी से रेडिक्स/बाल्टी-सॉर्ट जैसे कुछ पर भरोसा कर सकते हैं और सॉर्ट स्ट्रक्चर को निरंतर समय में अपडेट कर सकते हैं।

इस दृष्टिकोण के साथ, एक बार समानांतर कार्य समाप्त होने के बाद, आप आसानी से नए कार्य भी शुरू कर सकते हैं। बस निर्भरता गणनाओं को अपडेट करें, और उन सभी कार्यों को शुरू करें जिनके पास अब आने वाली निर्भरताएं हैं।

ध्यान दें कि यह दृष्टिकोण मानता है कि आपके पास उन सभी कार्यों को संसाधित करने के लिए पर्याप्त प्रोसेसिंग पावर है जिन पर एक ही समय पर निर्भरता नहीं है। यदि आपके पास प्रोसेसिंग समय के मामले में इष्टतम समाधान के लिए सीमित संसाधन और देखभाल है, तो आपको अधिक प्रयास करना होगा, क्योंकि समस्या एनपी-हार्ड बन जाती है (जैसा कि पहले से ही उल्लेख किया गया है)।

तो अपने मूल प्रश्न का उत्तर देने के लिए: हाँ, आप मूल रूप से सही हैं, हालांकि, आपको समझाने की कमी नहीं है कि उन स्वतंत्र कार्यों को कुशलता से कैसे निर्धारित किया जाए (ऊपर मेरा उदाहरण देखें)।

+0

धन्यवाद फ्रैंक, मैं खोदने वाला हूं। – Alcott

1

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

समांतरता का उपयोग करके, आपको बिन समस्या मिलती है, जो एनपी-हार्ड है। उस समस्या के लिए अनुमानित समाधान देखने का प्रयास करें।

+0

बिन समस्या? यह क्या है? – Alcott

+0

मेरा मतलब बिन पैकिंग का मतलब था। अगर आप पहली कॉफी से पहले पोस्ट करते हैं तो यही होता है। – arne

1

के Critical Path Method पर एक नज़र डालें। यह मूल रूप से आपको वही करता है जो आपको चाहिए: निर्भरता और अवधि के साथ दिए गए कार्यों, यह कितना समय लेगा, और प्रत्येक कार्य को सक्रिय करने के लिए कब उत्पादन करता है।

(*) ध्यान दें कि यह तकनीक इष्टतम समाधान के लिए संसाधनों की अनंत संख्या मान रही है। सीमित संसाधनों के लिए लालची एल्गोरिदम के लिए हेरिस्टिक्स हैं जैसे: जीपीआरडब्ल्यू [वर्तमान + निम्नलिखित कार्य समय] या एमएसएलके [न्यूनतम total slack समय]।

(*) यह भी ध्यान दें, इसे जानने की आवश्यकता है [या कम से कम अनुमान] प्रत्येक कार्य कितना समय लगेगा।

संबंधित मुद्दे