मैं एक पेड़ के नोड्स पर समकक्ष वर्ग बनाने के लिए एक अच्छी डेटा संरचना की तलाश में हूं। एक आदर्श संरचना में, निम्न कार्रवाई तेजी से (ओ (1)/ओ (जैसा उचित एन)) होना चाहिए और आसान (रहस्य कोड का कोई पैराग्राफ):पेड़ के नोड्स पर समानता कक्षाओं के निर्माण के लिए एक अच्छी डेटा संरचना क्या है?
- (ए) जड़ से पेड़ चलो; प्रत्येक नोड पर -> बच्चे संक्रमण चाइल्ड नोड
- (बी) दो तुल्यता कक्षाओं मर्ज के सभी बराबर संस्करणों की गणना
- (सी) मौजूदा नोड्स (बच्चों) और अन्य डेटा की एक सूची से नई नोड्स बनाएं
- (डी) नोड के संरचनात्मक रूप से समकक्ष किसी भी नोड्स खोजें (यानी उनके पास समान संख्या में बच्चे हैं, संबंधित बच्चे समान समकक्ष वर्ग के हैं, और उनका "अन्य डेटा" बराबर है) ताकि नए (या नए संशोधित) नोड्स हो सकें सही समकक्ष वर्ग (एक विलय के माध्यम से)
अब तक मैंने माना है (इनमें से कुछ संयोजन में उपयोग किया जा सकता है):
- एक पैराफैट, जहां बच्चे नोड्स के बजाय नोड्स के संग्रह के संदर्भ में हैं। (ए) तेज़ है, (बी) मर्ज किए गए संग्रह को इंगित करने के लिए पेड़ को चलाने और नोड्स को अपडेट करने की आवश्यकता है, (सी) को नए नोड के प्रत्येक बच्चे को संग्रह की आवश्यकता होती है, (डी) पेड़
- को बनाए रखने की आवश्यकता है उनकी विशेषताओं से नोड्स के हैश। यह (डी) बहुत तेज़ बनाता है लेकिन (बी) धीमा (चूंकि समकक्ष वर्गों को विलय कर दिया गया है, इसलिए हैश को अपडेट करना होगा)
- एक सर्कुलर लिंक्ड सूची में नोड्स को एक साथ स्ट्रिंग करना। (ए) तेज़ है, (बी) तेजी से होगा लेकिन इस तथ्य के लिए कि एक सर्कुलर सूची का "विलय" हिस्सा वास्तव में सूची को विभाजित करता है (सी) तेजी से होगा, (डी) पेड़
- चलने की आवश्यकता होगी उपरोक्त की तरह, लेकिन प्रत्येक नोड में एक अतिरिक्त "अप" पॉइंटर के साथ, जिसे परिपत्र सूची के कैननिकल सदस्य को खोजने के लिए उपयोग किया जा सकता है।
क्या मुझे एक मीठा विकल्प याद आ रहा है?
टैग एल्गोरिदम नहीं होना चाहिए, एल्गोरिदम नहीं। – ashawley