एक निर्देशित ग्राफ पर विचार करें, जिस पर कोई गतिशील रूप से किनारों को जोड़ सकता है और कुछ विशिष्ट प्रश्न बना सकता है।
उदाहरण: असंतुष्ट-सेट वन
निम्नलिखित प्रश्नों पर विचार करें:
arrow(u, v)
equiv(u, v)
find(u)
पहले एक एक तीर कहते हैं ग्राफ के लिए, दूसरा एक अगर फैसला करता है यू ↔ * वी , पिछले एक के तुल्यता वर्ग के एक विहित प्रतिनिधि पाता ↔ * , यानी एक आर ( यू ) ऐसी है कि यू ↔ * v तात्पर्य r ( v ) = r ( u ) ।
वहाँ एक है संबंध तोड़ना सेट वन डेटा संरचना का उपयोग अच्छी तरह से ज्ञात एल्गोरिथ्म अर्ध निरंतर में इन प्रश्नों को लागू करने जटिलता, अर्थात् परिशोधित। ध्यान दें कि इस मामले में उपयोग करके लागू किया गया है ।equiv
find
अधिक जटिल संस्करण
अब मैं एक और अधिक जटिल समस्या में दिलचस्पी लेता हूं जहां निर्देश मायने रखते हैं:
arrow(u, v)
confl(u, v)
find(u)
पहले एक तीर जोड़ता है , सेकंड तय करता है कि कोई नोड है जो और दोनों से पहुंच योग्य है , अर्थात । अंतिम एक ऑब्जेक्ट ऐसे वापस करना चाहिए जैसे कि अर्थ है जहां आसानी से कम्प्यूटेशनल होना चाहिए। (कहने, कहने के क्रम में )। लक्ष्य यह है कि एक अच्छा डेटा ढांचा खोजा जाए जिससे ये ऑपरेशन तेज़ हों।डब्ल्यू यू वी यू → * ← * वी आर ( यू ) यू → * ← * वी आर ( यू ) ∙ आर ( v ) ∙confl
साइकिल
ग्राफ में चक्र हो सकते हैं।
मुझे नहीं पता कि मुख्य समस्या के लिए केवल डीएजी पर विचार करने के लिए कुशलता से और सक्रिय रूप से जुड़े घटकों की गणना करने का कोई तरीका है।
निश्चित रूप से मैं डीएजी के लिए भी समाधान की सराहना करूंगा। यह कम से कम सामान्य पूर्वजों के वृद्धिशील गणना के अनुरूप होगा।
भोला दृष्टिकोण
असंतुष्ट-सेट वन डेटा संरचना यहां सहायक नहीं है, क्योंकि यह किनारों की दिशा की उपेक्षा करता है। ध्यान दें कि एक नोड नहीं हो सकता है, इस मामले में ग्राफ संगम नहीं है।
एक परिभाषित कर सकते हैं और परिभाषित करने के लिए के रूप में जब । लेकिन इस वेतनवृद्धि की गणना कैसे करें?∙ एस 1 ∙ एस 2 एस 1 ∩ एस 2 ≠ ∅
संभवतः यह कि इतने बड़े सेट की गणना करना उपयोगी नहीं है, एक छोटा सेट अधिक दिलचस्प होना चाहिए, जैसा कि सामान्य यूनियन-खोज एल्गोरिथ्म में है।