मैं एक डेटा संरचना मान के जोड़े के होते हैं जो एक पूर्णांक और दूसरा एक अल्फ़ान्यूमेरिक स्ट्रिंग (जो अंकों के साथ शुरू कर सकते हैं) है, जिनमें से है जिसमें से पहला है:कौन सा सी # डेटा संरचना स्ट्रिंग्स की एक जोड़ी को सबस्ट्रिंग्स के लिए सबसे कुशलता से खोजने की अनुमति देती है?
+--------+-----------------+
| Number | Name |
+--------+-----------------+
| 15 | APPLES |
| 16 | APPLE COMPUTER |
| 17 | ORANGE |
| 21 | TWENTY-1 |
| 291 | 156TH ELEMENT |
+--------+-----------------+
इन की एक तालिका होगा इसमें 100,000 पंक्तियां शामिल हैं।
मैं एक लुकअप फ़ंक्शन प्रदान करना चाहता हूं जिसमें उपयोगकर्ता या तो संख्या (जैसे कि यह एक स्ट्रिंग था), या स्ट्रिंग के टुकड़े देख सकता है। आदर्श रूप से लुकअप उपयोगकर्ता प्रकार के रूप में "लाइव" होगा; प्रत्येक कीस्ट्रोक (या शायद थोड़ी देर के बाद ~ 250-500 एमएस के बाद) सबसे संभावित उम्मीदवारों को खोजने के लिए एक नई खोज की जाएगी। इसलिए, उदाहरण के
1
पर खोज कर15 APPLES
,16 APPLE COMPUTER
,17 ORANGE
, और291 156TH ELEMENT
15
आदर्श लौट15 APPLES
को खोज को संकीर्ण होगा,291 156TH ELEMENT
AP
15 APPLES
और16 APPLE COMPUTER
- वापस आ जाएगी (, लेकिन आवश्यक नहीं)
ELEM
291 156TH ELEMENT
वापस आ जाएगा।
मैं अंत में int
रों तुलना में किया जा रहा है के बाद से दो Dictionary<string, string>
रों उपयोग करने के बारे में सोच रहा था string
रों के रूप में - पूर्णांक भाग के बाद एक अनुक्रमण किया जाएगा और स्ट्रिंग हिस्सा द्वारा अन्य।
लेकिन वास्तव में सबस्ट्रिंग द्वारा खोजना एक हैश फ़ंक्शन का उपयोग नहीं करना चाहिए, और ऐसा लगता है कि मुझे दो बार स्मृति की आवश्यकता है जो मुझे चाहिए।
आखिरकार सवाल यह है कि पाठ के लिए दो बड़े सूचियों को एक साथ करने के लिए कोई अच्छा प्रदर्शन करने वाला तरीका है?
विफल होने पर, SortedDictionary
के बारे में कैसे? प्रदर्शन में वृद्धि हो सकती है लेकिन अभी भी हैश समस्या का समाधान नहीं होगा।
फ्लाई पर रेगेक्स बनाने के बारे में सोचा, लेकिन मुझे लगता है कि यह बहुत अच्छा प्रदर्शन करेगा।
मैं सी # के लिए नया हूं (जावा दुनिया से आ रहा हूं) इसलिए मैंने अभी तक LINQ में नहीं देखा है; क्या वह जवाब है?
संपादित करें 18:21 ईएसटी: "नाम" फ़ील्ड में तारों में से कोई भी 12-15 वर्णों से अधिक नहीं होगा, यदि यह आपके संभावित समाधान को प्रभावित करता है।
मुझे लगता है कि [नुथ-मॉरिस-प्रैट एल्गोरिथ्म] के एक थोड़ा संशोधित कार्यान्वयन (http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm) होगा उपयोगी होना। – ChaosPandion
जब आप "कुशलतापूर्वक" कहते हैं तो क्या आपका मतलब "जल्दी" या कम से कम स्मृति है? आम तौर पर इन परिदृश्यों में आप स्मृति के लिए गति का व्यापार करते हैं, या दोनों के कुछ स्वीकार्य संतुलन पाते हैं। 100k स्ट्रिंग भी काफी स्थिर हैं, जिसका अर्थ है कि थोड़ा कारोबार है और उन्हें बार-बार खोजा जाता है? – EBarr
@EBarr: मेमोरी एक बड़ी चिंता नहीं है, लेकिन मैं बर्बाद नहीं होना चाहता। गति यहां अधिक महत्वपूर्ण है। – Tenner