7

दूसरे शब्दों में, क्या हम लगातार डेटा संरचना में कई रिश्तों को कुशलता से मॉडल कर सकते हैं?क्या कोई बिडरेक्शनल मल्टीमैप लगातार डेटा संरचना है?


यूनिडायरेक्शनल मल्टीमैप्स की एक जोड़ी का सुझाव दिया गया था। हालांकि, मुझे यकीन नहीं है कि यह लगातार डेटा संरचना में हटाने के लिए कैसे काम करेगा। चलिए इस मामले को लेते हैं जहां हमारे पास कुंजी "1." मान हैं। "4" .. "4" और मान लें कि वे सभी अन्य सभी को संदर्भित करते हैं, इसलिए हमारे पास दो नक्शे हैं जो दोनों दिशाओं के लिए बहुत समान दिखते हैं:

{1 => ["2", "3", "4"], 2 => ["1", "3", "4"], ...} {"1" => [2,3 , 4], "2" => [1,3,4], ...}

अब हम सिस्टम से पूरी तरह से आइटम 1 को हटाना चाहते हैं। इसके लिए पहले मानचित्र में एक नोड को बदलने की आवश्यकता है, लेकिन इसे दूसरे में एन -1 नोड्स बदलने की आवश्यकता है। हजारों में एन के लिए (जिस मामले में मैं इस पर विचार कर रहा हूं) क्या यह महंगा नहीं होगा? या उस प्रकार के परिवर्तन को संभालने के लिए अनुकूलित एक मल्टीमैप है? यह एक रोगजनक मामला है, लेकिन अभी भी ...


क्वाड्री एक आकर्षक विचार की तरह प्रतीत होता है। मैं कुछ और विचार देने जा रहा हूँ।

उत्तर

5

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

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

आखिरकार, मुझे ऐसा करने के लिए एक दिमागी बहने वाली गैर-नियमित पुनरावर्ती डेटा संरचना है, लेकिन मुझे अंग्रेजी में इसका संदर्भ नहीं मिल रहा है।

संपादित करें: मैं सिर्फ quickly pasted इस रहस्यमय डेटा संरचना के लिए मूल कोड का एक अनुकूलित संस्करण है।

+0

मैं उत्सुक हूं, मैं अंग्रेजी में नहीं होने पर भी दिमागी बहने वाली डेटा संरचना का संदर्भ चाहूंगा। – mentics

+0

@taotree> मैंने अभी इसके लिए कुछ कोड जोड़ा है। तुम क्या सोचते हो? – gasche

+0

दिलचस्प है, हालांकि मुझे लगता है कि कोई निकालना फ़ंक्शन नहीं है, जहां मैं इस प्रकार की चीज़ के लिए चुनौती चुन रहा हूं। साथ ही, ऐसा लगता है कि कुंजी और मान अलग-अलग प्रकार के होते हैं, या कम से कम वे दोनों में समान मान नहीं हो सकते हैं। – mentics

5

निर्माण द्वारा प्रमाण: bimap हास्केल के लिए पैकेज।

एक Bimap अनिवार्य रूप से अपने दो तर्क प्रकारों

और के सबसेट के बीच एक द्विभाजन यह कैसे कार्यान्वित किया जाता है है?

data Bimap a b = MkBimap !(M.Map a b) !(M.Map b a) 

यूनिडायरेक्शनल मानचित्रों की एक जोड़ी के रूप में।

संबंधित मुद्दे