मैं एक डेटा संरचना की तलाश कर रहा हूं, जो एक वर्ण सेट पर स्ट्रिंग्स का एक सेट संग्रहीत करता है , जो निम्न संचालन करने में सक्षम है। हम को दर्शाते हैं क्योंकि डेटा संरचना स्ट्रिंग्स के सेट को संग्रहीत करती है ।
Add-Prefix-Set
on : दिए गए कुछ सेट (संभवतः खाली) स्ट्रिंग्स, जिसका आकार एक स्थिरांक से घिरा होता है और जिसकी स्ट्रिंग लंबाई एक निरंतर, बाउंड । ये दोनों सीमावर्ती स्थिरांक वैश्विक हैं: वे सभी इनपुट लिए समान हैं ।Get-Prefixes
on : return । ध्यान दें कि मैं वास्तव में इस सेट के लिए किस संरचना का उपयोग नहीं करता हूं, जब तक कि मैं समय में इसकी सामग्री की गणना कर सकता हूं ।Remove-Prefixes
on : return ।Merge
: और , लौटाएं ।
अब, मैं वास्तव में समय में इन सभी ऑपरेशनों को करना चाहूंगा , लेकिन मैं एक संरचना के साथ ठीक हूं जो इन सभी ऑपरेशनों को समय में करता है, जहां सबसे लंबे स्ट्रिंग की लंबाई है संरचना। मर्ज के मामले में, मैं एक चाहते हैं चलने का समय, जहां है पहले के लिए और दूसरी संरचना के लिए।
एक अतिरिक्त आवश्यकता यह है कि संरचना अपरिवर्तनीय है, या कम से कम उपरोक्त ऑपरेशन 'नई' संरचनाएं लौटाते हैं जैसे कि पुराने के लिए संकेत अभी भी पहले की तरह कार्य करते हैं।
परिशोधन के बारे में एक नोट: यह ठीक है, लेकिन आपको दृढ़ता के लिए बाहर देखना होगा। जैसा कि मैं हर समय पुरानी संरचनाओं का फिर से उपयोग करता हूं, अगर मैं एक ही संरचना पर कुछ विशेष कार्यों के संचालन के साथ सबसे खराब स्थिति में हूं, तो मैं मुश्किल में पड़ जाऊंगा (इसलिए नई संरचनाओं की उपेक्षा करता है)।
मैं एक पार्सिंग एल्गोरिथ्म में ऐसी संरचना का उपयोग करना चाहता हूं, जिस पर मैं काम कर रहा हूं; उपर्युक्त संरचना में एल्गोरिथ्म के लिए मेरी आवश्यकता के अनुसार लुकहैड होगा।
मैंने पहले ही एक ट्राइ का उपयोग करने पर विचार किया है , लेकिन मुख्य समस्या यह है कि मुझे नहीं पता कि कैसे मर्ज करने की कुशलता से कोशिश करता है। यदि स्ट्रिंग्स के सेट में Add-Prefix-Set
केवल एकल-वर्ण स्ट्रिंग्स होते हैं, तो आप इन सेटों को एक स्टैक में संग्रहीत कर सकते हैं, जो आपको पहले तीन ऑपरेशनों के लिए रनिंग टाइम देगा। हालाँकि, यह दृष्टिकोण विलय के लिए काम नहीं करता है।
अंत में, ध्यान दें कि मुझे कारकों में कोई दिलचस्पी नहीं है: यह मेरी देखभाल के लिए निरंतर है।
Add-Prefix-Set
)
Add-Prefix-Set
या आप स्ट्रिंग्स के एक मनमाने सेट के साथ शुरू करते हैं?