5

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

+0

आप अभी यह कैसे कर रहे हैं? क्या आप कुछ कोड दिखा सकते हैं? –

+3

"समान" परिभाषित करें। –

+0

इसी तरह से मेरा मतलब उन शब्दों की तुलना करना है जो सामान्य वर्तनी की गलतियों जैसे "exanple" और "example" या "weird" और "wierd" हैं। – Lezan

उत्तर

8

BK-tree जैसा लगता है कि आप क्या चाहते हैं। यहां चर्चा करने वाला एक लेख यहां दिया गया है: http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees। एक quick Google कुछ जावा कार्यान्वयन पैदा करता है।

+0

धन्यवाद मैं इसे देख लूंगा और आपको बताऊंगा कि यह कैसा चल रहा है, धन्यवाद! – Lezan

+0

यूप ने ऐसा किया, खोज के एक अलग कार्यान्वयन की आवश्यकता थी, लेकिन यह सही था! धन्यवाद!! – Lezan

2

यदि 'समान' के लिए आपके मानदंड कुल ऑर्डरिंग को परिभाषित करते हैं, तो आप एक तुलनाकर्ता को परिभाषित करने और निकटतम मिलान (उदाहरण के लिए छत और मंजिल विधियों का उपयोग करके) को ट्रीसेट का उपयोग करने में सक्षम होना चाहिए।

6

लेवेनशेटिन ऑटोमाटा एक बड़े शब्दकोष से शब्दों के एक सेट के तेज़ चयन के लिए अनुमति देता है जैसे कि वे दिए गए शब्द से दिए गए लेवेनशेटिन दूरी के भीतर हैं।

देखें: शूलज़ के, मिहोव एस (2002) Fast String Correction with Levenshtein-Automata