2010-05-08 11 views
7

मेरे पास सकारात्मक एज-वेट्स के साथ एक निर्देशित विश्वकोश ग्राफ है। इसमें एक एकल स्रोत और लक्ष्य का एक सेट है (स्रोत से सबसे दूर स्तंभ)। मुझे स्रोत से प्रत्येक लक्ष्य तक सबसे कम पथ मिलते हैं। इनमें से कुछ पथ ओवरलैप हैं। जो मैं चाहता हूं वह एक छोटा रास्ता पेड़ है जो सभी किनारों पर वजन की कुल योग को कम करता है।सबसे कम पथ पेड़ की कुल लागत को कम करने के लिए कैसे करें

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

एक और उदाहरण: दो पथ गैर-ओवरलैपिंग पथों के लिए उच्च लागत के साथ, लंबी साझा पथ (कम संयुक्त लागत) के लिए कम लागत के साथ, उनकी लंबाई के एक छोटे से हिस्से के लिए गैर-ओवरलैपिंग हैं। दूसरी तरफ, दो पथ गैर-ओवरलैपिंग पथों के लिए कम लागत के साथ, उनकी अधिकतर लंबाई के लिए गैर-ओवरलैपिंग होते हैं, लेकिन लघु साझा पथ (भी कम संयुक्त लागत) के लिए उच्च लागत। कई संयोजन हैं। मैं सबसे कम समग्र लागत के साथ समाधान ढूंढना चाहता हूं, स्रोत से लक्ष्य तक के सभी सबसे छोटे मार्गों को देखते हुए।

दूसरे शब्दों में, मुझे सबसे छोटा, सबसे छोटा रास्ता-पेड़ चाहिए।

क्या यह किसी के साथ किसी भी घंटी बजता है? क्या कोई मुझे प्रासंगिक एल्गोरिदम या समान अनुप्रयोगों के लिए इंगित कर सकता है?

चीयर्स!

+0

एचएम ... विभाजन करने का प्रयास करें हालांकि मुझे यकीन नहीं है। उन सेटों में पथ जो दूसरों के साथ समान नहीं हैं। शायद हर किनारे को उलट दें और पूरक समस्या को हल करें ... –

+0

बस उन नोड्स और किनारों को हटाएं जो स्रोत से लक्ष्य तक किसी भी पथ पर नहीं हैं और परिणामी डीएजी के न्यूनतम वजन फैलाने वाले पेड़ की गणना करते हैं। ऐसा लगता है कि यह काम करेगा। उत्तरों में से एक भी इसका उल्लेख करता है। –

+0

ऐसा लगता है कि यह एनपी-पूर्ण है और एमएसटी सिर्फ एक लाल हेरिंग था। मैंने एक उत्तर पोस्ट किया है। –

उत्तर

1

यदि आपके पास केवल सकारात्मक लागत है और आप कम कर रहे हैं, तो बस Dijkstra's algorithm का उपयोग करें।

+0

यह स्पष्ट नहीं है कि इसका उपयोग कैसे करें। कृपया विस्तार से बताएं। -1 तब तक। साथ ही, प्रश्न को स्पष्ट करने के लिए _total_ वज़न (एक बार गिनती ओवरलैप) के बारे में है, इसलिए बस सभी सबसे छोटे पथों का उपयोग करना काम नहीं कर सकता है। –

+0

क्षमा करें, मैंने सवाल को गलत समझा। केवल एक चीज जिसे आप इस एल्गोरिदम का उपयोग कर सकते हैं, वज़न का उपयोग करके अनुमान लगाया जा सकता है जैसे कि नया वजन प्रारंभिक सिंक की संख्या से विभाजित होता है। – Kru

2

यह समस्या (Steiner Tree) एनपी-हार्ड और अधिकतम एसएनपी-पूर्ण है, इसलिए न तो बहुपद-समय एल्गोरिदम हैं और न ही पीटीएएस (मनमाने ढंग से करीब अनुमान) जब तक पी = एनपी।

एमएसटी इष्टतम से मनमाने ढंग से खराब वजन दे सकता है, जब तक कि आप अपने ग्राफ की कुछ विशेष विशेषता नहीं जानते (उदाहरण के लिए ग्राफ प्लानर है, या कम से कम वजन त्रिकोण असमानता का पालन करता है)। उदाहरण के लिए, यदि आपके पास सभी एज वजन 1 और केवल एक लक्ष्य के साथ K_1,000,000,001 है, तो इष्टतम समाधान में वजन 1 होता है और एमएसटी का वजन 1,000,000,000 है।

यदि आप मानते हैं कि लक्ष्य और प्रत्येक लक्ष्य के बीच सभी किनारों के बीच सभी किनार मौजूद हैं, तो आप अभी भी एक मनमाना कारक से ओवरहूट कर सकते हैं। उपरोक्त उदाहरण पर विचार करें, लेकिन लक्ष्य और स्रोत के बीच बढ़त वजन 2,000,000,000,000,000,000 में बदलें (आप अभी भी इष्टतम से एक अरब के कारक से बंद हैं)।

बेशक आप आलेख को 'हटाने' किनारों के वजन में बदल सकते हैं जो कि ओ (ई) या तो ग्राफ में ट्रैवर करके उच्च होते हैं। यह प्लस लक्ष्य और स्रोत के सेट का एक एमएसटी 2.

का अनुमानित अनुपात है। बेहतर अनुमान अनुपात मौजूद हैं। रोबिन्स & Zelikovsky एक बहुपद समय एल्गोरिथ्म है कि कभी नहीं 54.94% की तुलना में अधिक इष्टतम से भी बदतर है: The Steiner tree problem on graphs: Inapproximability results (दोई 10.1.1.4.1339: http://www.cs.virginia.edu/~robins/papers/soda2000_camera.pdf

Chlebik & Chlebikova पता चलता है कि करीब 1.05% का अनुमान करने एनपी कठिन है)

यदि आपका ग्राफ प्लानर है, तो स्थिति बेहतर है। एक तेज़ एल्गोरिदम है जो बोराडाइलिल, केन्यॉन-मैथ्यूयू & क्लेन (एरिक्सन, मोनमा, & वीनॉट पर निर्माण) के कारण मनमाने ढंग से नज़दीकी अनुमान प्रदान करता है: An O(nlogn) approximation scheme for Steiner tree in planar graphs (दोई 10.1.1.133।4154)

+0

अच्छी तरह से, मैंने सभी मामलों में नहीं कहा (मैंने अभी कहा विकी देखें)। वैसे भी, मैंने उस भाग को हटा दिया। धन्यवाद। वैसे भी सभी संदर्भों के लिए +1। मेरा सुझाव है कि आप एक लिंक भी जोड़कर कहें कि यह पहली जगह में क्या समस्या है। –

+0

मैंने प्रासंगिक लिंक जोड़ने के लिए पोस्ट संपादित किया है। –

+0

आपके कथन के संदर्भ को हटाने के लिए संपादित किया गया। मैं आरोप नहीं लगा रहा था, सिर्फ पाठकों के लिए इसे स्पष्ट करना चाहता था। लिंक के लिए धन्यवाद। – Charles

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