2011-09-02 13 views
7

मैं अपना होमवर्क पर निम्नलिखित समस्या है:पता लगाएं कि न्यूनतम स्पैनिंग पेड़ में रैखिक समय में किनारे हैं या नहीं?

एक हे दें (n + m) लगाने के लिए एल्गोरिथ्म है कि एक बढ़त ई एक ग्राफ

की MST का एक हिस्सा हो सकता है कि क्या (हमें इस असाइनमेंट पर दूसरों से मदद प्राप्त करने की इजाजत है, इसलिए यह धोखाधड़ी नहीं है।)

मुझे लगता है कि मैं एक बीएफएस कर सकता हूं और यह पता लगा सकता हूं कि यह किनारा दो परतों के बीच एक किनारा है और यदि ऐसा है तो यह किनारा था उन परतों में सबसे छोटा। लेकिन मैं यह कह सकता हूं कि यह किनारा बीएफएस पेड़ का पेड़ किनारा नहीं है?

+0

यदि यह होमवर्क है, तो इसे चिह्नित करें। –

उत्तर

8

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

इस संपत्ति का उपयोग करके, देखें कि क्या आप यह पता लगा सकते हैं कि किनारे रैखिक समय में किसी भी चक्र पर सबसे भारी किनारे है या नहीं।

+1

छोटा संस्करण: क्रस्कल के एल्गोरिदम को यह तय करने की आवश्यकता है कि किनारे ई शामिल है या नहीं? – quaint

+3

@templatetypedef आपको नहीं लगता कि एज ई केवल एमएसटी में होगा जब यह सभी चक्रों का सबसे भारी किनारा नहीं है, क्योंकि यह "कुछ चक्र में सबसे बढ़त किनारा नहीं है" के बजाय इसका हिस्सा है। उदाहरण के लिए यह देखें http://pastebin.com/irVzKXJa –

+0

@NikunjBanka आप सही हैं - मुझे इसे ठीक करने दें! – templatetypedef

1

पता लगाएं कि क्या मौजूदा पथ (यू, वी) से सस्ता कोई रास्ता है जो आपके और वी के लिए एक चक्र बनाता है। यदि हां, तो (u, v) mst पर नहीं है। अन्यथा यह है। यह कट संपत्ति और चक्र संपत्ति द्वारा साबित किया जा सकता है।

+0

बस सच नहीं है ... ....... –

4

हम MST cycle property का उपयोग करके इसे हल करेंगे, जो कहता है, "ग्राफ में किसी भी चक्र सी के लिए, यदि सी के किनारे का वजन सी के अन्य सभी किनारों के वजन से बड़ा होता है, तो यह किनारा संबंधित नहीं हो सकता एक एमएसटी के लिए। "

अब, निम्न O(E+V) एल्गोरिदम चलाएं ताकि परीक्षण किया जा सके कि एज ई कनेक्टिंग यूआईएस और वी कुछ एमएसटी का हिस्सा होगा या नहीं।

अंतिम-बिंदुओं में से एक से चरण 1

भागो DFS (या तो यू या v) बढ़त ई केवल उन किनारों कि वजन ई

की तुलना में कम

चरण है पर विचार के 2

केस 1 इस डीएफएस, कोने यू के अंत में और वी कनेक्ट हो, तो ई किनारे कुछ MST का हिस्सा नहीं हो सकता है। ऐसा इसलिए है क्योंकि इस मामले में ग्राफ़ में एक चक्र मौजूद है जिसमें एज ई अधिकतम वजन वाला है और यह एमएसटी (चक्र संपत्ति से) का हिस्सा नहीं हो सकता है।

केस 2 लेकिन डीएफएस के अंत में अगर यू और वी कट रहने, तो किनारे ई इस मामले में के रूप में कुछ MST का हिस्सा ई हमेशा सभी चक्र का अधिकतम वजन धार नहीं है होना चाहिए कि यह एक हिस्सा है।