एक बढ़ते अप्रत्यक्ष ग्राफ के संतुलित फैले हुए वृक्ष को बनाए रखना


19

मैं ग्राफ़ के अपेक्षाकृत संतुलित फैले हुए वृक्ष को बनाए रखने के तरीकों की तलाश कर रहा हूं, क्योंकि मैं ग्राफ़ में नए नोड्स / किनारों को जोड़ता हूं।

मेरे पास एक अप्रत्यक्ष ग्राफ है जो एकल नोड, "रूट" के रूप में शुरू होता है।

प्रत्येक चरण में, मैं ग्राफ़ में या तो एक नया नोड जोड़ता हूं और एक किनारा इसे ग्राफ़ से जोड़ता है, या बस एक नया किनारा, दो पुराने नोड्स को जोड़ता है। जैसा कि मैं ग्राफ बढ़ता हूं, मैं एक फैले हुए पेड़ को बनाए रखता हूं। अधिकांश समय, इसका मतलब यह है कि जब मैं एक नया नोड और किनारे जोड़ता हूं, तो मैं नए नोड को उस पुराने नोड के बच्चे के रूप में सेट करता हूं जो इसे जोड़ता है।

जिस क्रम में नए नोड जोड़े जाते हैं उस क्रम पर मेरा कोई नियंत्रण नहीं है, इसलिए उपरोक्त ट्री-बिल्डिंग एल्गोरिदम स्पष्ट रूप से असंतुलित पेड़ों की ओर बढ़ सकता है।

क्या किसी को ऑनलाइन हेयुरेटिक्स के बारे में पता है जो फैले हुए पेड़ को "अपेक्षाकृत संतुलित" बनाए रखेगा, जबकि पुन: वृक्षारोपण में किए गए काम की मात्रा को कम करेगा? पेड़ की संरचना पर मेरा पूरा नियंत्रण है। मैं जो नियंत्रण नहीं करता वह ग्राफ़ कनेक्टिविटी है, या जिस क्रम में नए नोड जोड़े जाते हैं।

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


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

एक बीएफएस पेड़ वास्तव में एक आदर्श संतुलित फैले पेड़ होगा यदि मैं इस ऑफ़लाइन चला रहा था, एक बार में पूरे ग्राफ के साथ। माता-पिता में नोड्स की संख्या की तुलना में एक स्थिर कारक द्वारा छोटे होने के लिए प्रत्येक उपप्रकार में नोड्स की संख्या की कोई आवश्यकता नहीं है।
सुपरइलेक्ट्रिक

क्या आपने शीर्ष पेड़ों की जांच की है? en.wikipedia.org/wiki/Top_tree
पीर सोमरलांड

जवाबों:


4

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


2

मैंने निम्नलिखित कार्य किया:

विनीसियस सांतोस का उत्तर इसका पहला भाग है। जैसा कि वे कहते हैं, किसी भी फ्रेम में मैं या तो एक नया नोड जोड़ता हूं और एक अभिभावक-बच्चा बढ़त को इससे जोड़ता हूं, या बस दो मौजूदा नोड्स के बीच एक क्रॉस-एज जोड़ें। माता-पिता के बच्चे के किनारों को पेड़ की संरचना को बदलने के लिए कोई अवसर नहीं प्रदान करते हैं, केवल क्रॉस-एज करते हैं। नोड ए और बी के बीच एक क्रॉस-एज ई को जोड़ने पर विचार करें, जहां बी में पेड़ की गहराई अधिक है। यदि (A.depth + 1) <B.depth, तो हम B. A को बच्चा बनाकर कम कर सकते हैं।

B की गहराई को कम करने के बाद, हमें अब B के पड़ोसियों की जांच करनी चाहिए, यह देखने के लिए कि क्या वे B के बच्चे बनकर अपनी गहराई कम कर सकते हैं। इसलिए हम B से एक चौड़ाई वाला पहला ट्रैवर्स करते हैं, जो X से Y तक की एक बढ़त का पता लगाता है यदि X। गहराई + 1 <Y.depth, और X का एक बच्चा होने के लिए Y सेट करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.