सभी नोड्स और किनारों वाले सबग्राफ जो एक अप्रत्यक्ष ग्राफ़ में लंबाई-सीमित सरल सेंट पथ का हिस्सा हैं


12

मेरे पहले पोस्ट किए गए प्रश्न के समान । हालांकि, इस बार ग्राफ अप्रत्यक्ष है।

दिया हुआ

  • एक अप्रत्यक्ष ग्राफ़ जिसमें कोई एकाधिक-किनारे या छोर नहीं हैं,G
  • एक सूत्र शिखर ,s
  • एक लक्ष्य शीर्ष ,t
  • अधिकतम पथ लंबाई ,l

मैं देख रहा हूँ का एक subgraph - है कि किसी भी शीर्ष और किसी भी बढ़त में शामिल है (और केवल उन), कि से कम से कम एक सरल मार्ग का हिस्सा हैं को लंबाई के साथ । जी जी एस टी एलGGGstl

टिप्पणियाँ:

  • मुझे रास्तों की गणना करने की आवश्यकता नहीं है।
  • मैं एक कुशल एल्गोरिथ्म (समय और स्मृति दोनों) की तलाश कर रहा हूं, क्योंकि मुझे इसे बहुत बड़े ग्राफ़ (10 ^ 8 वर्टेक्स, 10 ^ 9 किनारों) पर निष्पादित करने की आवश्यकता है।

इसकी जांच करें। इस पेपर को मिला , जो एक समान न्यूनतम लागत प्रवाह में कमी करने के लिए लगता है, लेकिन नेटवर्क की विशेष विशेषताओं का उपयोग करता है ताकि इसे तेजी से हल किया जा सके फिर सामान्य एमसीएफ एल्गोरिदम।
आरबी

जवाबों:


6

खैर, समस्या बाद में है। मैं पिछले उत्तर को रखूँगा क्योंकि यह निर्देशित मामले के लिए भी काम करता है (जो कि NPC है, जैसा कि अन्य प्रश्न पर उत्तर दिया गया है), और यह दिखाता है कि यह L के संबंध में F P T हैPFPTl

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

निम्न प्रक्रिया तय करेगा कि कुछ बढ़त उत्पादन ग्राफ का एक हिस्सा होना चाहिए। मूल समस्या का जवाब देने के लिए सभी किनारों पर बस लूप करें।e=(u,v)E

प्रवाह नेटवर्क बनाने के लिए, निम्नानुसार करें:

चरण 1: का विस्तार करें एक वर्टेक्स एक्स और किनारों के साथ ( यू , एक्स ) , ( एक्स , यू ) , ( वी , एक्स ) , ( एक्स , वी ) (वे एक के रूप में निर्देशित हैं प्रवाह नेटवर्क का हिस्सा), उनकी लागत को 0 पर सेट करता है।exee(u,xe),(xe,u),(v,xe),(xe,v)

चरण 2: हर वर्टेक्स बदलें , एक्स ई के अलावा दो कोने टी - और टी + , और एक किनारे ( टी - , टी + ) जोड़ें । इन किनारों की लागत को 1 पर सेट करें।txett+(t,t+)

चरण 3: हर बढ़त के बदलें किनारों के साथ ( एक + , - ) , ( + , एक - ) । इन किनारों की लागत को 0 पर सेट करें।{a,b}E(a+,b),(b+,a)

चरण 4: एक नई वर्टेक्स जोड़ें और लागत 0 के साथ किनारों ( एस , वाई ) , ( टी , वाई ) को जोड़ें।ye(s,ye),(t,ye)

चरण 5: सभी क्षमताओं को 1 पर सेट करें।

अब से मान 2 के प्रवाह के लिए खोज मिनट लागत प्रवाह एल्गोरिथ्म चलाने के लिए, करने के लिए y xeye


विश्लेषण:

  • xeyeएक्स टी y xesyexetye
  • पथ असंतुष्ट हैं, क्योंकि प्रत्येक शीर्ष के लिए चाप में केवल 1 क्षमता है ।( t - , t + )t(t,t+)
  • लौटे पथ वे दो मार्ग हैं जिनकी दूरी कम से कम है, और यह भी पाया गया प्रवाह की लागत है। यह हमें आउटपुट ग्राफ में जोड़ने या अन्यथा हटाने की अनुमति देता है ।e

1
निर्देशित प्रवाह में कमी को दूर करके उपरोक्त उत्तर में तर्क को समझना आसान है। वहाँ से एक सरल मार्ग है को एक नोड युक्त iff वहाँ एक रास्ता है से के और एक पथ से करने के लिए ऐसी है कि और पर छोड़कर नोड संबंध तोड़ना हैं । यह महत्वपूर्ण रूप से अप्रत्यक्षता का उपयोग करता है। इसे प्रवाह के माध्यम से जांचा जा सकता है और लागत संस्करण को न्यूनतम लागत प्रवाह के माध्यम से भी किया जा सकता है। एक जाँच कर सकते हैं वहाँ से एक सरल मार्ग है कि क्या को युक्तटी वी पी वी एस क्यू वी टी पी क्यू वी एस टी stvPvsQvtPQvste के बीच में एक नोड शुरू करके । e
चंद्रा चकुरी

@ChandraChekuri - यह सही है, लेकिन ध्यान रखें कि यदि समस्या की लंबाई में बाधा नहीं है, तो इसे तय करने के लिए बहुत सरल एल्गोरिदम है - यहां देखें
RB

निश्चित रूप से, मुझे उस समाधान के बारे में भी जानकारी है - वैचारिक रूप से यह असंतुष्ट रास्तों के माध्यम से द्विभाषी घटकों को समझने के लिए अच्छा है, भले ही कोई व्यक्ति डीएफएस के माध्यम से सीधे कट-कास्ट और द्विस्तरीय घटकों को पा सके।
चंद्रा चकुरी

@ आरबी: धन्यवाद। एल के अपेक्षाकृत बड़े होने पर सुझाए गए अल्गोरिह्म प्रभावी हो सकते हैं, लेकिन यह संभवतः एल के अपेक्षाकृत छोटे मूल्यों के लिए उप-रूपी है। मुझे लगता है कि मैं टी से एस और सीइल (एल / 2) से फर्श (एल / 2) की तुलना में किसी भी शीर्ष को दूर करके पहले जी ट्रिम कर सकता हूं।
लायर कोगन

1
क्रमिक कम से कम पथ एल्गोरिथ्म को अपनाने का प्रयास करें (इसे 2 रास्तों के मामले के लिए सर्बल के एल्गोरिथ्म भी कहा जाता है जो यहां रुचि रखते हैं)। आप से सबसे छोटा 2-पथ ढूंढना चाहते हैं (यह बेहतर है कि इसे बजाय क्योंकि यह सभी किनारों के लिए समान है) प्रत्येक । मुझे लगता है कि यह पहले से सबसे छोटे रास्ते के पेड़ की गणना करके और फिर कुछ देखभाल के साथ दूसरे रास्ते की गणना को लागू करने के लिए कुशलतापूर्वक संभव है। y y e x yyyyexey
चंद्रा चकुरी

1

यहाँ एक है गलत उत्तर: यह कुछ कोने कि गैर-सरल रास्तों का हिस्सा हैं आउटपुट को कर रहे हैं और कि से किसी भी सरल मार्ग का हिस्सा नहीं को लंबाई की । उत्तर अभी भी पूछने वाले के आवेदन के लिए प्रासंगिक हो सकता है, इसलिए मैं इसे यहां छोड़ रहा हूं।टी एस टी stst

यहाँ एक एल्गोरिथ्म है जो में चलता है (और वास्तव में इससे भी तेज है जब छोटा होता है)।O(|V|+|E|)

एल्गोरिथ्म से एक BFS खोज चलाता कि गहराई में समाप्त । यह BFS सबसे अधिक पर लंबाई के एक पथ के साथ से पहुंचने वाले सभी का एक सेट देता है , और यह प्रत्येक लिए दूर की दूरी गणना भी करता है । तब मैं से ही काम करता और सेट और से दूरी प्राप्त करता । अंत में, आप जिस कोने की तलाश कर रहे हैं, वह वास्तव में । किनारों बिल्कुल ( में वे किनारेवी एस एस मैं रों टी ( रों , v ) वी वी एस टी वी टी टी वी एस एल यू टी मैं एन = { v : v वी एसवी टी , d मैं रों टी ( रों , v ) + d i s t ( t ,sVssdist(s,v)vVstVtt[ वी एस एल यू टी मैं एन ] = ( वी , यू ) : यू , वी वी एस एल यू टी मैं एनVsolution={v:vVsVt,dist(s,v)+dist(t,v)}E[Vsolution]=(v,u)E:u,vVsolution)।

इस एल्गोरिथ्म का रनिंग टाइम निश्चित रूप से क्योंकि यह सिर्फ दो BFS करता है। लेकिन चलने का समय वास्तव में है ग्राफ के आकार की तुलना में काफी छोटा होगा जो जब -radius के पड़ोस और छोटे हैं।O(|V|+|E|)O(|Vs|+|Vt|+|E[Vs]|+|E[Vt]|)st

संपादित करें: वहाँ शायद कुछ हद तक एक तेजी से व्यवहार में एल्गोरिथ्म है कि से एक BFS करता है और गहराई का केवल के बजाय । यह सभी रास्तों को पता चलता है, और फिर थोड़ा बहीखाता के साथ आप सभी कोने ढूंढ सकते हैं। यह एक बड़े यादृच्छिक-दिखने वाले ग्राफ के मामले के लिए एक वर्गमूल द्वारा चल रहे समय को काट देता है जब छोटा होता है।st/2


3
यह रास्ता सरल होने के लिए मजबूर नहीं करता है। सरल पथ ग्राफ और पर विचार करें । आप को आउटपुट के भाग के रूप में लौटाएंगे , हालाँकि कोई सरल सेंट पथ नहीं है जो माध्यम से जाता है ...tusvxl=4vv
RB

सुधार @RB के लिए धन्यवाद। मैंने अपना जवाब नोट किया कि यह गलत है।
मोबियस डंपलिंग 13:14

1

यह एक टिप्पणी के रूप में अभिप्रेत है, लेकिन यह एक टिप्पणी के रूप में पोस्ट करने के लिए बहुत लंबा है।

आप अपने उद्देश्यों के लिए ग्राफ़ स्पैनर या एमुलेटर में भी रुचि ले सकते हैं। एक नापनेवाला एक ग्राफ के एक subgraph है कुछ किनारों के साथ है, लेकिन लगभग दूरी संरक्षित। एक एमुलेटर एक ग्राफ जिसके किनारों को भारित करने की अनुमति है।एच = ( वी , ' ) एच = ( वी , ' , डब्ल्यू )G=(V,E)H=(V,E)H=(V,E,w)

बैनर के लिए सबसे अच्छा परिणाम किनारों और ग्राफ में दूरी अनुमानों पर +6 की एक योजक त्रुटि है। एमुलेटर के लिए सबसे अच्छा परिणाम किनारों और +4 का एक अतिरिक्त त्रुटि है। यह ज्ञात नहीं है कि क्या हम को हरा सकते हैं , भले ही त्रुटि पॉलीग्लारिथमिक होने की अनुमति हो।हे ( एन 4 / 3 ) हे ( एन 4 / 3 )O(n4/3)O(n4/3)O(n4/3)

यदि यह उपयोगी लगता है, तो मैं आपके लिए प्रासंगिक निर्माणों की कोशिश कर सकता हूं और खुदाई कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.