निर्देशित संघ-खोज


11

एक निर्देशित ग्राफ पर विचार करें, जिस पर कोई गतिशील रूप से किनारों को जोड़ सकता है और कुछ विशिष्ट प्रश्न बना सकता है।G

उदाहरण: असंतुष्ट-सेट वन

निम्नलिखित प्रश्नों पर विचार करें:

arrow(u, v)
equiv(u, v)
find(u)

पहले एक एक तीर कहते हैं ग्राफ के लिए, दूसरा एक अगर फैसला करता है यू * वी , पिछले एक के तुल्यता वर्ग के एक विहित प्रतिनिधि पाता * , यानी एक आर ( यू ) ऐसी है कि यू * v तात्पर्य r ( v ) = r ( u )uvuvr(u)uvr(v)=r(u)

वहाँ एक है संबंध तोड़ना सेट वन डेटा संरचना का उपयोग अच्छी तरह से ज्ञात एल्गोरिथ्म अर्ध निरंतर में इन प्रश्नों को लागू करने जटिलता, अर्थात् परिशोधित। ध्यान दें कि इस मामले में उपयोग करके लागू किया गया है ।O(α(n))equivfind

अधिक जटिल संस्करण

अब मैं एक और अधिक जटिल समस्या में दिलचस्पी लेता हूं जहां निर्देश मायने रखते हैं:

arrow(u, v)
confl(u, v)
find(u)

पहले एक तीर जोड़ता है , सेकंड तय करता है कि कोई नोड है जो और दोनों से पहुंच योग्य है , अर्थात । अंतिम एक ऑब्जेक्ट ऐसे वापस करना चाहिए जैसे कि अर्थ है जहां आसानी से कम्प्यूटेशनल होना चाहिए। (कहने, कहने के क्रम में )। लक्ष्य यह है कि एक अच्छा डेटा ढांचा खोजा जाए जिससे ये ऑपरेशन तेज़ हों।डब्ल्यू यू वी यू * * वी आर ( यू ) यू * * वी आर ( यू ) आर ( v ) uvwuvuvr(u)uvr(u)r(v)confl

साइकिल

ग्राफ में चक्र हो सकते हैं।

मुझे नहीं पता कि मुख्य समस्या के लिए केवल डीएजी पर विचार करने के लिए कुशलता से और सक्रिय रूप से जुड़े घटकों की गणना करने का कोई तरीका है।

निश्चित रूप से मैं डीएजी के लिए भी समाधान की सराहना करूंगा। यह कम से कम सामान्य पूर्वजों के वृद्धिशील गणना के अनुरूप होगा।

भोला दृष्टिकोण

असंतुष्ट-सेट वन डेटा संरचना यहां सहायक नहीं है, क्योंकि यह किनारों की दिशा की उपेक्षा करता है। ध्यान दें कि एक नोड नहीं हो सकता है, इस मामले में ग्राफ संगम नहीं है।r(u)

एक परिभाषित कर सकते हैं और परिभाषित करने के लिए के रूप में जब । लेकिन इस वेतनवृद्धि की गणना कैसे करें?एस 1एस 2 एस 1एस 2r(u)={vuv}S1S2S1S2

संभवतः यह कि इतने बड़े सेट की गणना करना उपयोगी नहीं है, एक छोटा सेट अधिक दिलचस्प होना चाहिए, जैसा कि सामान्य यूनियन-खोज एल्गोरिथ्म में है।

जवाबों:


3

( संपादित करें : अब मेरे जवाब को पूरी तरह से फिर से लिख लें कि समस्या के बारे में मेरी समझ (मुझे उम्मीद है) स्पष्ट है।)

ऐसा लगता है कि इस समस्या को ग्राफ के परिवर्तनशील बंद होने के एक वृद्धिशील निर्माण और सुधार के लिए कम किया जा सकता है, जैसा कि ग्राफ बनाया और खोजा गया है।

यू वी वी यू यू , वी यू वी यू डब्ल्यू वी डब्ल्यूr(u) , सार रूप से, सभी नोड्स का सेट है जो ग्राफ में प्रत्येक लिए और दोनों से उपलब्ध हैं । (बेशक, सभी नहीं जोड़े के पास आवश्यक रूप से एक नोड होगा जो उन दोनों से पहुंचा जा सकता है।) संघ-खोज के मामले के विपरीत, इस सेट को ग्राफ में एक कैनोनिकल प्रतिनिधि नोड के रूप में प्रतिनिधित्व नहीं किया जा सकता है, क्योंकि और दोनों से पहुंच योग्य नोड्स हो सकते हैं , और और दोनों से , जो फिर भी और दोनों से उपलब्ध नहीं हैं ।uvvuu,vuvuwvw

आप को बनाए रखने, हर के लिए कहो , नोड्स का एक सेट से पहुंचा जा सकता से (मैं इस फोन करता हूँ )। आवश्यकता के ये सेट प्रत्येक नोड के लिए एक अतिरिक्त डेटा संरचना या कम से कम, ग्राफ़ में अतिरिक्त "शॉर्टकट" किनारों का एक सेट होगा। यदि आप ग्राफ़ की निर्दिष्ट संरचना को बनाए रखने के बारे में परवाह नहीं करते हैं, तो इन किनारों और निर्दिष्ट किनारों के बीच अंतर करने की कोई आवश्यकता नहीं होगी।यू आर ( यू )uuR(u)

डेटा संरचना के लिए मेरे पास कोई विचार नहीं है जो इसे कैप्चर करता है जो सामान्य मामले की तुलना में अधिक कुशल है (उदाहरण के लिए थोड़ा वेक्टर या हैश टेबल), लेकिन आप इन सेटों को क्रमिक रूप से अपडेट कर सकते हैं :

हर बार जब आप से किसी अन्य नोड एक बढ़त जोड़ते हैं , तो आप ।वी आर ( यू ) = आर ( यू ) आर ( v )uvR(u)=R(u)R(v)

conflपहले कोशिश करके लागू करें ; अगर यह गैर-खाली है, तो सही लौटें। लेकिन अगर यह है खाली, से दो समानांतर चौड़ाई-पहले खोज करते हैं और जब तक आप या तो दोनों ही पहुंचा जा सकता सेट निकास या आम में एक नोड पाते हैं। आप ऐसा करते हैं, वहीं यह भी अद्यतन और (और 'सभी मध्यवर्ती नोड्स आप पाते हैं की एस) से पहुंचा जा सकता नोड्स है कि आप पाया शामिल करने के लिए। और यदि आप एक नोड को सामान्य में पाते हैं, तो R (u) = R (v) = R (u) \ cup R (v) सेट करेंR(u)R(v)R(u)R(v)R(u)R(v)R

find(u)बस । समस्या यह है कि विशुद्ध रूप से लागू नहीं किया गया है । मैं नहीं देख सकता कि यह कैसे संभव हो सकता है जब तक कि एल्गोरिथ्म गैर-वृद्धिशील नहीं था (यानी ग्राफ के सकर्मक बंद होने के साथ सभी नोड्स के सभी सेटों की पूर्व गणना करें ।) हालांकि, वृद्धिशील दृष्टिकोण अभी भी आपको काफी परिशोधित करना चाहिए। लागत, हालांकि मुझे नहीं पता कि यह ऑफहैंड के पास है। (यह संभवत: नहीं है। आपके सेट के संतृप्त होने पर भी आपको एक गलत उत्तर की आवश्यकता है कि आप दो BFS'S शुरू करें ; यह भी अपरिहार्य लगता है जब तक कि एल्गोरिथ्म को गैर-वृद्धिशील नहीं बनाया जाता है।)R(u)conflfindRO(α(n))conflR

यह बहुत कुछ ऐसा लगता है जैसे यह ला पॉट्रे और वैन लीउवेन के तरीकों का एक विशेष मामला हो सकता है जो एक ग्राफ के सकर्मक समापन को बनाए रखने के लिए है

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


आपके उत्तर के लिए धन्यवाद, मुझे आशा है कि मैंने अपना प्रश्न अब और स्पष्ट कर दिया है: मैं जुड़े घटकों के बारे में परवाह नहीं करता (लेकिन दृढ़ता से सीसी अंतिम समाधान के लिए सहायक हो सकता है); मेरे पास अभी तक नहीं है और यह एक DAG में एक नोड नहीं हो सकता है। r(u)r(u)
jmad

ठीक है, यह थोड़ा स्पष्ट है। ऐसा लगता है कि है, अमूर्त रूप से, सभी नोड्स का सेट जो ग्राफ़ में प्रत्येक लिए और दोनों से उपलब्ध हैं । यह सेट हटकर "शॉर्टकट" किनारों का एक सेट हो सकता है , मुझे लगता है, और फिर यह ग्राफ में अभिकर्मक के सकर्मक बंद होने की गणना करने जैसा लगता है। मुझे अभी भी तुरंत यह नहीं दिखाई देता है कि ऐसा क्यों नहीं किया जा सकता है क्योंकि यह यूनियन-फाइंड की तुलना में अधिक स्टोरेज / वर्क (लेबल / अपडेट सभी "शॉर्टकट" किनारों) की आवश्यकता होती है। इसका कोई मतलब भी है क्या? r(u)uv vuu
क्रिस प्रेसे

सकर्मक समापन को चिह्नित करने का एक उचित तरीका है , ऐसा लगता है कि यह निकटता से संबंधित होगा: en.wikipedia.org/wiki/…r(u)
क्रिस प्रेस

मुझे नहीं लगता कि औरconfl(u,v) विलय होना चाहिए । यह उन्हें संशोधित कर सकता है, लेकिन यह पहले से ही कॉल द्वारा किया जाएगा , जैसे कि असंतुष्ट-सेट वन पद्धति में। R(u)R(v)find
jmad

आप सही कह रहे हैं कि इससे उनका विलय नहीं होना चाहिए; मैं उत्तर संपादित करूँगा। लेकिन कॉल findवास्तव में उपयोगी कुछ भी गणना नहीं कर सकता है, क्योंकि को छोड़कर "खोजने" के लिए कोई अनोखी वस्तु नहीं है , जो अनुमान है। ( अद्यतन करने के लिए क्या देखना चाहिए, यह कैसे जाना जाता है? यह केवल दिया जाता लेकिन में जानकारी संभवतः ग्राफ में हर दूसरे नोड पर लागू होती है।)आर ( यू ) यू आर ( यू )r(u)R(u)finduR(u)
क्रिस प्रेसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.