में सबसे लंबी पथ समस्या के लिए अनुकूलन चक्रीय ग्राफ में सबसे लंबा रास्ता खोजने की कोशिश करने के लिए कौन से अनुकूलन मौजूद हैं?चक्रीय ग्राफ
चक्रीय ग्राफ में सबसे लंबा रास्ता एनपी-पूर्ण माना जाता है। क्या ऑप्टिमाइज़ेशन या हेरिस्टिक्स पूरे ग्राफ को डीएफएसिंग से सबसे लंबा रास्ता तेज कर सकता है? क्या कोई संभाव्य दृष्टिकोण है?
मेरे पास विशिष्ट गुणों वाला ग्राफ है, लेकिन मैं सामान्य मामले में इसका उत्तर ढूंढ रहा हूं। कागजात से जुड़ा होना शानदार होगा। यहां आंशिक उत्तर दिया गया है:
पुष्टि करें कि यह चक्रीय है। गतिशील प्रोग्रामिंग का उपयोग करके विश्वकोश ग्राफ में सबसे लंबा रास्ता आसानी से गणना की जाती है।
पता लगाएं कि ग्राफ प्लानर है (कौन सा एल्गोरिदम सर्वोत्तम है?)। यदि ऐसा है, तो आप देख सकते हैं कि यह एक ब्लॉक ग्राफ, टॉलेमेमिक ग्राफ, या कैक्टि ग्राफ है और this paper में पाए गए तरीकों को लागू करें।
पता लगाएं कि Donald B Johnson's algorithm (Java implementation) का उपयोग करके कितने सरल चक्र हैं। आप एक सरल चक्र में किनारे को हटाकर किसी भी चक्रीय ग्राफ को एक विश्वकोश में बदल सकते हैं। फिर आप the Wikipedia page पर पाए गए गतिशील प्रोग्रामिंग समाधान को चला सकते हैं। पूर्णता के लिए, आपको प्रत्येक चक्र के लिए यह एन बार करना होगा, जहां एन चक्र की लंबाई है। इस प्रकार, पूरे ग्राफ के लिए, आपको डीपी समाधान चलाने के लिए कितनी बार सभी चक्रों की लंबाई के उत्पाद के बराबर है।
यदि आपको पूरे ग्राफ को डीएफएस करना है, तो आप प्रत्येक नोड की "पहुंच क्षमता" की गणना करके कुछ पथों को पूर्ववत कर सकते हैं। यह पहुंच क्षमता, जो मुख्य रूप से निर्देशित ग्राफ पर लागू होती है, नोड्स की संख्या प्रत्येक नोड पुनरावृत्ति के बिना पहुंच सकती है। यह संभवतः उस नोड से सबसे लंबा रास्ता हो सकता है। इस जानकारी के साथ, यदि आपका वर्तमान पथ प्लस नोड की पहुंचने योग्यता सबसे लंबे समय से कम है, तो उस शाखा को लेने में कोई बात नहीं है क्योंकि यह असंभव है कि आपको लंबा रास्ता मिल जाएगा।
करता है (3 (कृपया, निश्चित-आकार सरणियों का उपयोग कर के बारे में कोई टिप्पणी नहीं। एक वास्तविक कार्यक्रम में सी ++
vector<int>
) का उपयोग करेंmalloc()
(या बेहतर अभी तक,। मैं सिर्फ यह इस तरह से तो बातें स्पष्ट हो जाएगा। लिखा था)) दृढ़ता से जुड़े घटकों को खोजने से संबंधित है? (http://en.wikipedia.org/wiki/Strongly_connected_component) - यदि नहीं, तो मैंने सोचा होगा कि आप उन लोगों के साथ कुछ कर सकते हैं। मैंने टार्ज़न्स एल्गोरिदम को समझने में काफी आसान पाया। – Steve314मैं ईमानदारी से नहीं देखता कि दृढ़ता से जुड़े घटकों या कशेरुक संकुचन की पहचान एलपीपी को हल करने में कैसे मदद करती है, लेकिन मैं गलत हो सकता हूं। इसे एक विश्वकोश ग्राफ में जोड़ने के लिए, मेरा मानना है कि आपको सरल चक्र (जॉनसन) की आवश्यकता है, क्योंकि दृढ़ता से जुड़े घटकों में चक्र अभी भी हो सकते हैं। –
शायद यह मदद नहीं करता है। मेरा विचार था कि एससीसी आमतौर पर पूरे ग्राफ से छोटे होते हैं, इसलिए प्रत्येक प्रविष्टि/निकास जोड़ी के लिए उनके माध्यम से सबसे लंबे मार्गों को ढूंढना अपेक्षाकृत तेज़ होना चाहिए। एससीसी को हटाएं और इनमें से प्रत्येक सबसे लंबे मार्ग-मार्ग-एससीसी समाधानों के लिए एक भारित किनारा जोड़ें और आपको एक विश्वकोशिक डिग्राफ के साथ समाप्त होना चाहिए जिसे आप गतिशील प्रोग्रामिंग कर सकते हैं। प्रत्येक सबसे लंबा मार्ग-दर-एससीसी एज वास्तव में उस किनारे को प्रतिस्थापित करता है जो एससीसी में प्रवेश करता है और किनारे को छोड़ देता है, साथ ही एससीसी के माध्यम से मार्ग भी जाता है। हालांकि, मुझे कुछ याद आ रहा है। – Steve314