8

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

  • तत्वों की एक नई जोड़ी के साथ च विस्तार जटिलता ओ (ln एन)
  • क्वेरी करने f (x है:

    उदाहरण के लिए, मैं खुश अगर, एक द्विभाजन आकार n का च पर विचार होगा) या च^-1 (एक्स) है जटिलता ओ (ln एन)

  • च के लिए आंतरिक प्रतिनिधित्व अधिक स्थान 2 परिमित नक्शे (च और उसके व्युत्क्रम का प्रतिनिधित्व)

मैं के बारे में पता कर रहा हूँ की तुलना में कुशल है क्रमपरिवर्तन का कुशल प्रतिनिधित्व एस, this paper की तरह, लेकिन यह मेरी समस्या का समाधान नहीं लगता है।

+10

दो सीमित नक्शे होने के कारण सुंदर स्थान कुशल है ... यह ओ (एन) स्थान है। मैं कल्पना नहीं कर सकता कि आप उससे बेहतर कर सकते हैं। –

+4

दो सीमित नक्शे के साथ शुरू करें, और जब आप स्मृति से बाहर निकलें तो कुछ और चालाक के बारे में चिंता करें। हैशमैप्स अच्छे हैं, अगर आप दो प्रकार हैंश कर सकते हैं। – augustss

+3

ऐसा लगता है कि आपका फ़ंक्शन कड़ाई से मोनोटोन है, तो आप दोनों फ़ंक्शन और उलटा दोनों के लिए एक ही पेड़ खोज सकते हैं। यह एक लंबा शॉट है, मुझे लगता है। –

उत्तर

10

कृपया अपेक्षाकृत समान प्रश्न के लिए my answer पर एक नज़र डालें। provided code सामान्य एनएक्सएम संबंधों को संभाल सकता है, लेकिन केवल विचलन के लिए भी विशिष्ट हो सकता है (जैसा कि आप एक बाइनरी खोज पेड़ के लिए करेंगे)।

संपूर्णता के लिए यहाँ जवाब चिपकाने:

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

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

+0

आपकी डेटा संरचना एक [केडी-पेड़] (https://en.wikipedia.org/wiki/Kd-tree) के लिए भावना में समान दिखती है। – esope

5

हालांकि यह आपकी तीसरी आवश्यकता को पूरा नहीं करता है, bimap एस जाने का रास्ता प्रतीत होता है। (वे केवल दो सीमित नक्शे बनाते हैं, प्रत्येक दिशा में एक, उपयोग करने के लिए सुविधाजनक।)

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