आपका एल्गोरिथ्म गलत है । मुझे लगता है कि आपको पता है कि प्रत्यय सरणी और एक स्ट्रिंग के LCP सरणी की गणना कैसे की जाती है, अर्थात् उनका कुशल कार्यान्वयन। जैसा कि टिप्पणियों में बताया गया है, आपको यह समझने की कोशिश करनी चाहिए कि प्रत्येक घटक क्या है, और यह क्यों काम करता है।
सबसे पहले, एक स्ट्रिंग का प्रत्यय सरणी ( ) है। प्रत्यय सरणी मूल रूप से एस के सभी प्रत्यय हैं जो आरोही लेक्सिकोग्राफिक क्रम में व्यवस्थित होते हैं। विशेष रूप से, मूल्य एस ए [ मैं ] इंगित करता है कि प्रत्यय एस स्थिति से शुरू एस ए [ मैं ] स्थान दिया गया है मैं के सभी प्रत्यय कोषगत आदेश में एस ।SASSA[i]SSA[i]iS
अगला सरणी है। L C P [ i ] S A [ i - 1 ] और S A [ i ] से शुरू होने वाले प्रत्ययों के बीच सबसे लंबे सामान्य उपसर्ग की लंबाई को इंगित करता है । यही है, यह लेक्सिकोग्राफिक क्रम में व्यवस्थित होने पर एस के दो लगातार प्रत्ययों के बीच सबसे लंबे सामान्य उपसर्ग की लंबाई का ट्रैक रखता है ।LCPLCP[i]SA[i−1]SA[i]S
एक उदाहरण के रूप में, स्ट्रिंग । कोषगत क्रम में प्रत्यय होगा { एक , एक ख ख एक ख ग एक , एक ख ग एक , ख एक ख ग एक , ख ख एक ख ग एक , ख ग एक , ग एक } , तो एस ए = [ 7 , १S=abbabca{a,abbabca,abca,babca,bbabca,bca,ca}1-अनुक्रमित सरणी के लिए , 4 , 3 , 2 , 5 , 6 ] । एल सी पी सरणी होगा एल सी पी = [ - , 1 , 2 , 0 , 1 , 1 , 0 ] ।SA=[7,1,4,3,2,5,6]LCPLCP=[−,1,2,0,1,1,0]
अब, और B को दो तार दिए गए हैं , हम उन्हें S = A # B के रूप में सम्मिलित करते हैं , जहाँ # एक ऐसा चरित्र है जो A और B दोनों में मौजूद नहीं है । इस तरह के चरित्र को चुनने का कारण यह है कि दो प्रत्ययों के LCP की गणना करते समय, एक b # d a b d और a b d कहें , तुलना पहली तार के अंत में टूट जाएगी (क्योंकि यह केवल एक बार होती है, दो अलग-अलग प्रत्ययों में कभी भी एक ही स्थिति में नहीं होगा), और दूसरे स्ट्रिंग में "अतिप्रवाह" नहीं होगा ।ABS=A#B#ABab#dabdabd
अब, यह देखा जा सकता है कि आपको यह देखने में सक्षम होना चाहिए कि आपको केवल सरणी में लगातार मूल्यों को देखने की आवश्यकता क्यों है (यह तर्क विरोधाभास पर आधारित है और तथ्य यह है कि एस ए में प्रत्यय शाब्दिक क्रम में हैं)। अधिकतम मान के लिए L C P सरणी की जाँच करते रहें , ताकि दोनों प्रत्ययों की तुलना एक ही मूल स्ट्रिंग से न हो। यदि वे एक ही मूल स्ट्रिंग से संबंधित नहीं हैं (एक ए और दूसरे बी में शुरू होता है ), तो सबसे बड़ा ऐसा मूल्य सबसे बड़े सामान्य विकल्प की लंबाई है।LCPSALCPAB
एक उदाहरण के रूप में, और B = b c पर विचार करें । फिर, S = a b c a b c # b c । सॉर्ट किए गए प्रत्यय हैं { a b c # b c , a b c a b c # b c , b c , b c # b c , b c aA=abcabcB=bcS=abcabc#bc । एस ए{abc#bc,abcabc#bc,bc,bc#bc,bcabc#bc,c,c#bc,cabc#bc}
SALCP=[4,1,8,5,2,9,6,3,7]=[−,3,0,2,2,0,1,1,0]
अब, सबसे बड़ा मान , लेकिन यह S A [ 1 ] और S A [ 2 ] के लिए है , दोनों स्ट्रिंग A में शुरू होते हैं । इसलिए, हम इसे अनदेखा करते हैं। दूसरी ओर, एल सी पी [ 4 ] = 2 के लिए है एस ए [ 3 ] (प्रत्यय से मेल खाती है ख ग की बी ) और एस ए [ 4 ]LCP[2]=3SA[1]SA[2]ALCP[4]=2SA[3]bcBSA[4](प्रत्यय करने के लिए इसी की एक )। तो, यह दो तारों के बीच सबसे लंबा सामान्य प्रतिस्थापन है। वास्तविक सबरिंग प्राप्त करने के लिए, आप S A [ 3 ] या S A [ 4 ] , जो b c है, से शुरू करने के लिए एक लंबाई 2 (सबसे बड़ी संभव L C P का मान ) लेते हैं ।bcabc#bcA2 LCPSA[3]SA[4]bc