पेड़ों के सेट के लिए एक डेटा संरचना।


10

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

मैं कुशलतापूर्वक पेड़ों को स्टोर करने के लिए इसी तरह की तलाश कर रहा हूं। मैं सदस्यता के लिए जाँच करने और तत्वों को जोड़ने में सक्षम होना चाहूंगा, अगर किसी दिए गए पेड़ में कुछ संग्रहीत पेड़ों का उप-योग है या यदि कोई मौजूद पेड़ मौजूद है तो दिए गए पेड़ का एक उपप्रकार होना भी वांछनीय है।

मैं आमतौर पर ५० से कम ऊंचाई के लगभग ५०० असंतुलित बाइनरी पेड़ों को संग्रहीत करता हूँ।

संपादित करें

मेरा आवेदन कुछ प्रकार के संस्मरण का उपयोग करके मॉडल चेकर है। कल्पना कीजिए कि मैं एक राज्य है और निम्नलिखित सूत्र: और के साथ एक जटिल subformula जा रहा है, और कल्पना मैं पहली बार यह जानना चाहते हैं चाहते में धारण । मैं हूँ कि क्या रखती है और एक लंबी प्रक्रिया के बाद मुझे लगता है कि यह मामला है। अब, मुझे पता है कि अगर चाहते में धारण । मैं इस तथ्य को याद है कि चाहते हैं रखती है और ध्यान में है कि ताकि मैं प्राप्त कर सकते हैं में लगभग तुरंत।= φ = ( φ ψ ) φ रों φ जी एस एफ जी जी एस जी टी एफ टीsf=ϕg=(ϕψ)ϕfsϕgsfgfgs
इसके विपरीत, अगर मैंने यह साबित कर दिया है कि में नहीं , तो मैं बताना चाहता हूं कि लगभग तुरंत में पकड़ नहीं रखता है ।gtft

हम सूत्रों पर एक आंशिक आदेश बना सकते हैं, और iff । के लिए प्रत्येक राज्य , हम फार्मूले के दो सेट की दुकान; अधिकतम फ़ार्मुलों को संग्रहीत करता है जो धारण करते हैं और न्यूनतम फ़ार्मुलों को संग्रहीत करते हैं जो धारण नहीं करते हैं। अब एक स्टेट और एक फॉर्मूला , मैं देख सकता हूं कि , या if जिस स्थिति में है किया है और मुझे पता है कि क्या सीधे में धारण ।रों एल ( रों ) एल ( रों ) रों जी एल ( रों ) , जी एल ( रों ) , जी रोंgfgfsL(s)l(s)sgfL(s),fgfl(s),gfgs

वर्तमान में, और को सूचियों के रूप में लागू किया जाता है और यह स्पष्ट रूप से इष्टतम नहीं है क्योंकि मुझे व्यक्तिगत रूप से सभी संग्रहीत सूत्रों के माध्यम से पुनरावृति करने की आवश्यकता है। यदि मेरे सूत्र अनुक्रम थे, और यदि आंशिक क्रम "का उपसर्ग है" तो एक तिकड़ी बहुत तेजी से साबित हो सकती है। दुर्भाग्य से मेरे फॉर्मूले में एक पेड़ है जैसे संरचना , एक मोडल ऑपरेटर और परमाणु प्रस्ताव पर आधारित है।एल ¬ , Ll¬,

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


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

2
क्या आप बस एक क्रमबद्धता का इस्तेमाल किया है, तो निम्नलिखित संपत्ति के साथ पेड़ों की: के एक सबट्री है यदि और केवल यदि की सबस्ट्रिंग है ? ऐसे का निर्माण सीधा है [यदि आप पहली बार अपने पेड़ों का एक विहित रूप पाते हैं]। उसके बाद, आपका प्रश्न मिलान के विकल्प के बराबर है, जो कि तंत्रशास्त्र में व्यापक रूप से अध्ययन की जाने वाली समस्या है। टी टी ' एस ( टी ) एस ( टी ' ) एसSTTS(T)S(T)S
जुक्का सुकोला

1
इंडेक्सिंग शब्द पर नज़र डालें ।
Starblue

1
एक और त्वरित विचार सभी पेड़ों को t1, t2, .. को एक बड़े पेड़ T में संग्रहीत करना होगा, प्रत्येक किनारे के लिए याद रखना कि यह पेड़ों का सेट है। फिर, यह निर्धारित करने के लिए कि क्या एफ संग्रहीत पेड़ों में से एक सबट्री है, जो आप पहले निर्धारित करते हैं कि एफ टी में एक सबट्री है और यदि हां, तो उस सबट्री के सभी किनारे-लेबल सेटों को काट दें। जवाब हां है अगर चौराहा गैर-खाली है। (आप भी दो चरणों को जोड़ सकते हैं)।
मार्टिन बी।

जवाबों:


5

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

(डरो मत कि लिंक किया गया पेपर "जैविक नेटवर्क में नेटवर्क रूपांकनों" के बारे में है: जी-ट्राइ ग्राफ के लिए एक पूरी तरह से अच्छा सार डेटा संरचना है।)


4

इसका एक विशेष रूप हठ है : ड्रिंकॉल, सरनाक, स्लीटोर, और टारजन द्वारा डेटा संरचनाएं बनाने वाले कागजात देखें, और सरनाक और टारजन द्वारा लगातार खोज पेड़ों का उपयोग करते हुए प्लानर पॉइंट लोकेशन, जो संबंधित पेड़ों के परिवारों को संग्रहीत करते हैं।


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

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

1

यह एक जंगल की तरह थोड़ा सा लगता है (जंगल से लगे जंगल ) ...

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



0

"प्योरली फंक्शनल डेटा स्ट्रक्चर्स" (1998) में, क्रिस ओकासाकी बाइनरी पेड़ों के प्रकारों (10.3%) का उपयोग करने की कोशिश करता है।

मुझे नहीं पता कि यह तुरंत मदद करता है; वहां दिए गए समाधान सीधे लागू नहीं हो सकते हैं।


0

प्रोग्रामर लिंगो में: यदि आप पेड़ों को सामान्य उप-अभिव्यक्तियों / पेड़ों / डीएजी से बनाते हैं, तो आपके पास एक अच्छा कॉम्पैक्ट मॉडल होगा। तो निर्देशित चक्रीय रेखांकन। फिर पेड़ों का एक सेट पर्याप्त होगा।

पब्लिक क्लास ट्री {स्ट्रिंग ऑपरेशन; वृक्ष [] उपप्रकार;

public int compareTo(Tree rhs) {
    if (rhs == null) return false;
    int cmp = operation.compareTo(rhs.operation);
    if (cmp == 0) {
        cmp = Arrays.compareTo(subtrees, rhs.subtrees);
    }
    return cmp;
}

...}

मानचित्र सामान्य रूप से देखें = नया हैशपॉप ();

ट्री मिलता है (स्ट्रींग एक्सप्रेशनसिंटैक्स) {ट्री टी = नया ट्री (); t.operation = ...; t.subtrees = ... पुन: प्राप्त करने के लिए पुनरावर्ती कॉल; ट्री t2 = commonSubExpressions.get (t); if (t2 == null) {t2 = t; commonSubExpressions.put (t2, t2); } t2 वापस; }}

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