2010-06-08 10 views
7

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

ठीक है, तो यहां मेरा प्रश्न है: जब कोई किनारा हटा दिया जाता है, तो क्या यह संभव है, निरंतर समय (यानी ओ (1) एल्गोरिदम के साथ) निर्धारित करना संभव है, यदि ऐसा करने से ग्राफ को दो अपमानित उपग्राफों में विभाजित किया जाएगा? यदि यह होगा, तो किनारे के किनारे रूट नोड संबंधित होंगे?

मैं उचित सीमाओं के भीतर, किसी भी अतिरिक्त डेटा संरचना को बनाए रखने के लिए तैयार हूं जो इस जानकारी के व्युत्पन्न को सुविधाजनक बना सकता है।

शायद ओ (1) में ऐसा करना संभव नहीं है, यदि साहित्य के किसी भी संकेतक की सराहना की जाएगी।

संपादित करें: आलेख एक निर्देशित ग्राफ है।

संपादित करें 2: ठीक है, शायद मैं रूट नोड से किनारों को हटाने के लिए केस को प्रतिबंधित कर सकता हूं। [संपादित करें 3: नहीं, असल में] इसके अलावा, रूट नोड में कोई किनारा नहीं है।

+0

, एक पत्ता नोड के लिए ग्राफ जोड़ने बढ़त हटाया जाने वाला है, तो वह पत्ती नोड को हटाने के लिए मान लिया है? वैकल्पिक रूप से, क्या एक पत्ता नोड को हटाने से ग्राफ़ को शेष ग्राफ से कनेक्ट किया जा सकता है? – VeeArr

+0

@VeeArr: एक पत्ता नोड को हटाने से सभी किनारों को भी लिंक किया जाता है। एक किनारे को हटाने के लिए जो एक पत्ता-नोड और एक गैर-पत्ता नोड को जोड़ता है, जिसे स्वयं प्रश्न से ढंकना चाहिए (एक मनमाना किनारा हटाना)। –

+0

तुम मुझे क्यों नहीं बताते हो ?! आप ** the_graph_guy ** !! –

उत्तर

1

क्या यह एक निर्देशित ग्राफ है? नीचे अप्रत्यक्ष मानता है।

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

ओ (1) पूछने के लिए बहुत कुछ है।

आपको लगता है कि गतिशील ग्राफ में 2-किनारे जुड़े घटकों को बनाए रखने के लिए आप के लिए उपयोगी हो सकता है। http://www.ics.uci.edu/~eppstein/pubs/EppGalIta-TR-93-20.pdf

जो 2-किनारे जुड़े घटकों बनाए रख सकते हैं, एन नोड्स के एक ग्राफ में जहां बढ़त सम्मिलन और विलोपन अनुमति दी जाती है:

Eppstein एट अल यह एक कागज पर है। इसमें O (sqrt (n)) प्रति अपडेट समय और ओ (लॉग एन) प्रति प्रश्न समय है।

तो जब भी आप हटाते हैं, तो आप यह निर्धारित करने के लिए ओ (लॉग इन) में क्वेरी कर सकते हैं कि 2-किनारे जुड़े हुए घटकों की संख्या बदल गई है या नहीं। मुझे लगता है कि यह आपको यह भी बता सकता है कि कौन सा घटक एक विशिष्ट नोड है।

यह पेपर अधिक सामान्य है और अन्य ग्राफ समस्याओं पर लागू होता है, न केवल 2 किनारे जुड़े घटक।

मेरा सुझाव है कि आप शुरू करने के लिए पुलों और गतिशील 2-किनारे कनेक्टिविटी की तलाश करें।

उम्मीद है कि मदद करता है।

7

स्पष्ट ओ (| वी | + | ई |) समाधान पर थोड़ा सा चीजों को गति देने के लिए, आप एक स्पैनिंग पेड़ रख सकते हैं जो ग्राफ़ बदलने के साथ अपडेट करना काफी आसान है।

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

तो, सबसे अच्छा मामला ओ (1), सबसे खराब मामला ओ (| वी | + | ई |), लेकिन वैसे भी लागू करने के लिए काफी सरल है।

+0

क्या आप कृपया बता सकते हैं कि पेड़ के किनारे को हटाने के मामले में आप स्पैनिंग पेड़ को कैसे अपडेट करेंगे? यह आपके द्वारा लिखे गए शब्दों से स्पष्ट नहीं लगता है। –

+0

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

0

जैसा कि मॉरन ने पहले कहा था, आप वास्तव में अपने ग्राफ में एक पुल की तलाश में हैं।

अब एक पुल एक किनारा है जिसमें वर्णित विशेषता है और यह भी में कट और समाप्त होता है कट वर्टेक्स। कट वर्टेक्स बिल्कुल एक पुल है, लेकिन एक कशेरुक (नोड) संस्करण में।

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

यह पता लगाना कि ग्राफ में कोई नोड एक कट वर्टेक्स लेता है ओ (एम + एन) जहां एम = # किनारों और एन = # नोड्स।

चीयर्स

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