मान लीजिए कि आपके पास स्मृति में लगातार पूर्णांक की एक बड़ी श्रृंखला है, जिनमें से प्रत्येक बिल्कुल एक श्रेणी से संबंधित है। दो ऑपरेशन ओ (लॉग एन) होना चाहिए: एक श्रेणी से दूसरे श्रेणी में एक श्रेणी को स्थानांतरित करना, और किसी दिए गए श्रेणी के लिए श्रेणी गणना करना।लगातार पूर्णांक की बड़ी श्रृंखला के लिए डेटा संरचना?
मुझे पूरा यकीन है कि दूसरे ऑपरेशन को पहले ऑपरेशन के लिए सही कार्यान्वयन के साथ हल किया गया है।
प्रत्येक पूर्णांक एक श्रेणी में शुरू होता है, इसलिए मैंने संतुलित बीएसटी के एक सेट के साथ शुरुआत की। एक बीएसटी से दूसरे में एक उप-स्थानांतरित करना (उदाहरण के लिए, एक श्रेणी को एक अलग श्रेणी में ले जाना) में दो बीएसटी विलय करने के बराबर रनटाइम होता है, जो ओ (एन 1 * एन 2) [1] है।
यह बहुत धीमा है (पायथन में, और सी एक विकल्प नहीं है), और मैं एक कुशल बीएसटी मर्ज ऑपरेशन बनाने के लिए अपने डेटा की अंतर्निहित संरचना का लाभ उठाने का एक तरीका नहीं समझ पाया।
अब मैं एवीएल, लाल-काले, और अंतराल के पेड़, बाइनरी ढेर और ट्रेप्स देख रहा हूं। उनकी संपत्तियों की तुलना करना जबरदस्त है। मुझे किस संरचना का उपयोग करना चाहिए?
संपादित करें (समस्या स्पष्टीकरण): मैं इन मूल्यों को संग्रहीत करने और अपनी डेटा संरचनाओं को बनाने के तरीके पर लचीला हूं। मैं इस बारे में लचीला हूं कि मुझे अपना इनपुट कैसे प्राप्त होता है, जो किसी अन्य एप्लिकेशन से आता है, और निम्न जैसा दिखता है: CATEGORY(cat3, I, J)
। मेरा वर्तमान समाधान सीमा में प्रत्येक पूर्णांक के लिए एक नोड के साथ एक पेड़ बनाता है। यह मेरे डेटासेट के आकार के लिए बहुत धीमा है, इसलिए यदि बेहतर तरीका दिया गया है तो मुझे फिर से आर्किटेक्ट करने में खुशी होगी।
कोई भी अनुरोध किसी भी श्रेणी में पूर्णांक की किसी भी संभावित सीमा को स्थानांतरित कर सकता है। दूसरे शब्दों में, CATEGORY(cat1, 1, 10)
के बाद CATEGORY(cat3, 5, 15)
के अर्थ में श्रेणियां ओवरलैपिंग कर रही हैं, लेकिन इस अर्थ में गैर-ओवरलैपिंग कि प्रत्येक पूर्णांक किसी भी समय बिल्कुल एक श्रेणी में होगा।
क्या सीमा पूर्णांक की सूची के रूप में सहेजी गई है या '(प्रारंभ, अंत)' जैसे टुपल के रूप में सहेजी गई है? कुछ पेड़ों को लागू करने से पहले –
, आपको डिज़ाइन और सेट जैसे बिल्टिन डेटाटाइप का उपयोग करने का प्रयास करना चाहिए। ये अत्यधिक अनुकूलित और बहुत ही कुशल हैं। – rocksportrocker
तो आपके पास tuples के साथ एक सूची है [(संख्या 1, cat1), ....] ??? – rocksportrocker