ग्राफ में दो / तीन अलग-अलग न्यूनतम पेड़ हैं?


15

मैं यह पता लगाने का एक कुशल तरीका खोजने की कोशिश कर रहा हूं कि क्या दिए गए ग्राफ जी में दो अलग-अलग न्यूनतम फैले हुए पेड़ हैं। मैं यह जांचने के लिए एक विधि खोजने की कोशिश कर रहा हूं कि इसमें 3 अलग-अलग न्यूनतम फैले हुए पेड़ हैं या नहीं। भोले समाधान है कि मैं हालांकि के बारे में एक बार Kruskal के एल्गोरिथ्म चल रहा है और कम से कम फैले हुए पेड़ के कुल वजन का पता लगा रहा है। बाद में, ग्राफ़ से एक किनारे को हटाकर और क्रुस्कल के एल्गोरिथ्म को फिर से चलाना और यह जांचना कि नए पेड़ का वजन मूल न्यूनतम फैले हुए पेड़ का वजन है, और इसलिए ग्राफ में प्रत्येक किनारे के लिए। रनटाइम ओ (! वी। ई। लॉग इन | वी |) है जो बिल्कुल अच्छा नहीं है, और मुझे लगता है कि ऐसा करने का एक बेहतर तरीका है।

कोई भी सुझाव उपयोगी होगा, अग्रिम धन्यवाद


इस तरह के एल्गोरिथ्म के बारे में पता होना अच्छा होगा, लेकिन यह इस मौजूदा समस्या को हल नहीं करेगा
इटमार

2
ग्राफ में एक अद्वितीय न्यूनतम फैले हुए वृक्ष होंगे यदि और केवल अगर (1) वी ( जी ) के किसी भी विभाजन के लिए दो सबसेट में, प्रत्येक उपसमुच्चय में एक समापन बिंदु के साथ न्यूनतम वजन बढ़त अद्वितीय है, और (2) अधिकतम वजन G के किसी भी चक्र में बढ़त अद्वितीय है। जीवी(जी)जी
जुहो १५'१३

क्या ये प्रश्न एक और दो पहले से ही आपके प्रश्न का उत्तर देते हैं?
जुहो १५'१३

में दूसरा सबसे अच्छा MST खोजने के लिए CLRS में समस्या 23-1 देखें । हे(n2)
केवह

जवाबों:


7

कपूर और रमेश ( उचित SIAM जे। कम्प्यूट संस्करण , मुफ्त (?) व्यक्तिगत वेबसाइट संस्करण ) सभी भारित और बिना भार वाले रेखांकन में सभी न्यूनतम फैले पेड़ों की गणना के लिए एक एल्गोरिथ्म देते हैं।

मूल विचार के बारे में मेरी समझ यह है कि आप एक एमएसटी से शुरू करते हैं, फिर उन किनारों को स्वैप करते हैं जो ग्राफ में चक्रों के साथ झूठ बोलते हैं (जब तक कि वजन ठीक है, आप एक किनारे को दूसरे के साथ बदल रहे हैं जो आपको पता है कि पेड़ को फिर से जोड़ना होगा) ।

भारित मामले के लिए, वे सभी न्यूनतम फैले पेड़ों की सूची के लिए एक समय देते हैं, जहाँ N ऐसे फैले पेड़ों की संख्या है। यह वज़न बढ़ने के क्रम में उनकी गणना करता है, और मेरी वर्तमान (सरसरी) समझ से पता चलता है कि एल्गोरिथम को समाप्त करने के लिए यह पूरी तरह से संभव है, क्योंकि यह एक निश्चित संख्या में पेड़ उत्पन्न करता है (क्योंकि यह सिर्फ एमएसटी से शुरू होता है और क्रमिक रूप से उन्हें पैदा करता है)।हे(एन|वी|)एन


इस स्थिति में, हम एल्गोरिथ्म को जल्दी से समाप्त करना चाहते हैं क्योंकि हम जानते हैं कि समाधान से अधिक हैं। क्या एल्गोरिथ्म इसके लिए अनुमति देता है?
राफेल

1
@ राफेल, मेरे पास वास्तव में इसके साथ पकड़ में आने का समय नहीं है (या असाइनमेंट मार्किंग), लेकिन मेरी समझ से, यह संभव होना चाहिए - यह कुछ एमएसटी से शुरू होता है, फिर एक-एक करके दूसरों को उत्पन्न करता है।
ल्यूक मैथिसन

1
nn-2

1
हे(|वी|)

1
एक त्वरित पढ़ने के बाद, भारित एल्गोरिथ्म वजन बढ़ाने के क्रम में पेड़ों को उत्पन्न करता है (स्पष्ट रूप से एमएसटी से शुरू)। तो यह ओपी के उद्देश्यों के लिए होना चाहिए।
ल्यूक मैथिसन

2

एक दिखा सकता है कि क्रुस्कल के एल्गोरिथ्म में हर न्यूनतम फैले हुए पेड़ मिल सकते हैं; यहाँ देखें ।


5
1,5

@vonbrand अच्छी बात है। हम निश्चित रूप से गणना की सभी शाखाओं को समाप्त करने के लिए जारी रख सकते हैं, लेकिन फिर रनटाइम को फैले पेड़ों की संख्या से निर्धारित किया जाता है, जो घातीय हो सकता है।
राफेल

1

यह देखने के लिए कि क्या एक से अधिक MST हैं, उदाहरण के लिए Kruskal के एल्गोरिथ्म पर विचार करें। जिस तरह से यह अलग-अलग एमएसटी का निर्माण कर सकता है वह एक ही वजन के साथ कई अन्य को चुनकर किनारों को छोड़कर है। लेकिन उन्हीं वजन वाले किनारों को खारिज किया जा सकता है क्योंकि उन्होंने हल्के किनारों के साथ एक चक्र का गठन किया था ...

तो आपको क्रुस्कल के एल्गोरिथ्म को चलाना चाहिए, और जब विचार करने के लिए एक ही वजन के साथ कई किनारों होते हैं, तो उन सभी को जोड़ दें जिन्हें चक्र बनाए बिना जोड़ा जा सकता है। अगर इस भार का एक छोर बचा है, और यह कम वजन (जो पहले जोड़ा गया था) के साथ किनारों में से किसी के साथ एक चक्र को बंद नहीं करता है, तो एक से अधिक एमएसटी है। जाँच रहे हैं कि क्या वास्तव में 2 या 3 या अधिक हैं, आदि बहुत कठिन लगता है ...


0

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

वह समाधान क्रुस्ल के एल्गोरिथ्म की जटिलता को संरक्षित करता है, केवल यह संसाधित किए गए प्रत्येक किनारे के लिए समय बढ़ाता है।


आपको लगता है कि आप निरंतर समय में एक पूरे क्लस्टर को संसाधित कर सकते हैं, लेकिन मुझे लगता है कि मुझे क्लस्टर के आकार पर कोई स्पष्ट निरंतरता दिखाई नहीं दे रही है। क्या आप इस बारे में अधिक विस्तार दे सकते हैं कि उस चरण को कैसे किया जाता है?
डेविड रिचेर्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.