इस समस्या के लिए प्रत्यय सरणियों का उपयोग किया जा सकता है। वे लेक्सिकोग्राफ़िक क्रम में छाँटे गए स्ट्रिंग के प्रत्येक प्रत्यय के शुरुआती पदों को समाहित करते हैं। भले ही वे जटिलता में भोलेपन से निर्मित किए जा सकते हैं , फिर भी उन्हें निर्माण करने के तरीके हैं in जटिलता। उदाहरण के लिए देखें यह और यह । हमें इस प्रत्यय सरणी SA कहते हैं।Θ ( n )ओ ( एन लॉगn )Θ ( n )
प्रत्यय सरणी का निर्माण हो जाने के बाद, हमें प्रत्यय सरणी के लिए एक सबसे लंबी कॉमन प्रीफ़िक्स (LCP) सरणी बनाने की आवश्यकता है। LCP सरणी प्रत्यय सरणी (lexicographic लगातार प्रत्ययों) में दो लगातार उपसर्गों के बीच सबसे लंबे सामान्य उपसर्ग की लंबाई संग्रहीत करता है। इस प्रकार, LCP [i] में SA [i] और SA [i + 1] के बीच सबसे लंबे आम उपसर्ग की लंबाई है। इस सरणी का निर्माण रैखिक समय में भी किया जा सकता है: कुछ अच्छे संदर्भों के लिए यहां , यहां और यहां देखें ।
अब, प्रत्यय के पेड़ में किसी भी दो प्रत्ययों के लिए सबसे लंबे समय तक उपसर्ग की लंबाई की गणना करने के लिए (लगातार प्रत्ययों के बजाय), हमें कुछ आरएमक्यू डेटा संरचना का उपयोग करने की आवश्यकता है । यह ऊपर दिए गए संदर्भों में दिखाया गया है (और आसानी से देखा जा सकता है यदि सरणी को एक प्रत्यय के पेड़ के रूप में कल्पना की जाती है), कि प्रत्यय सरणी में और ( ) वाले दो प्रत्ययों के बीच सबसे लंबे आम उपसर्ग की लंबाई है , रूप में प्राप्त किया जा सकता है । एक अच्छा RMQ या समय में सरणी को प्री-प्रोसेस कर सकता है और में फॉर्म के प्रश्नों का जवाब देता है।v u < v m i n u < = k < = v - 1 L C P [ k ] L C P O ( n ) O ( n log n ) L C P [ u , v ] O ( 1 )यूvआप < vm i nu < = k < = v - 1एल सीपी[ के ]एल सीपीओ ( एन )ओ ( एन लॉगn )एल सीपी[ यू , वी ]ओ ( 1 )समय। देखें यहाँ एक लधु RMQ एल्गोरिथ्म के लिए, और यहाँ RMQ के पर एक अच्छा ट्यूटोरियल, और रिश्ते (और कटौती) एलसीए और RMQs के बीच के लिए। यह एक और अच्छा विकल्प है।
इस जानकारी के साथ, हम बीच में एक सीमांकक (जैसे कि टी # पी, जहां '#' या तो स्ट्रिंग में नहीं होता है) के साथ दो तारों के संघात के लिए प्रत्यय सरणी और संबंधित सरणियों (जैसा कि ऊपर वर्णित है) का निर्माण करते हैं। फिर, हम "कंगारू" पद्धति का उपयोग करके k बेमेल स्ट्रिंग मिलान कर सकते हैं। यह और यह प्रत्यय पेड़ों के संदर्भ में कंगारू विधि की व्याख्या करता है, लेकिन सीधे प्रत्यय सरणियों पर भी लागू किया जा सकता है। टेक्स्ट के हर इंडेक्स के लिए , से शुरू होने वाले के प्रत्यय का और का प्रत्यय 0. पर शुरू होता है। यह स्थान देता है जिसके बाद मिलान करते समय पहला बेमेल होता है।मैंएल सी पी टी मैं पी पी टी [ मैं ] एल 0 टी पी एल सी पी टी [ मैं + एल 0 + 1 ]टीएल सीपीटीमैंपीपीसाथ । इस लंबाई को होने । और दोनों में बेमेल चरित्र को छोड़ दें और शेष तारों का मिलान करने का प्रयास करें। यही है, फिर से और का खोजें । इसे तब तक दोहराएं जब तक आप बेमेल प्राप्त नहीं करते, या तो स्ट्रिंग फ़िनिश करते हैं। प्रत्येक है । कर रहे हैं 'प्रत्येक सूचकांक के लिए है की , इस की कुल जटिलता दे रही ।टी[ i ]एल0टीपीएल सीपीT[i+l0+1]P[l0+1]kLCPO(1)O(k) LCPiTO(nk)
O ( n k + n लॉग एन ) m = O ( n )O(nk+(n+m)log(n+m))O(nk+nlogn)m=O(n)O(nk)