सबसे लंबा सामान्य अनुवर्ती एक प्रकार का अनुगमन होता है जो दिए गए अनुक्रमों या सरणियों दोनों में मौजूद होता है।
हम देख सकते हैं कि कई उपसमस्याएं हैं, जिनकी गणना इस समस्या को हल करने के लिए बार-बार की जाती है। डायनेमिक प्रोग्रामिंग की ओवरलैपिंग सबस्ट्रक्चर प्रॉपर्टी का उपयोग करके, हम कम्प्यूटेशनल प्रयासों को दूर कर सकते हैं। उप-समस्याओं के परिणाम की गणना और तालिका में संग्रहीत करने के बाद, हम पिछले परिणामों का उपयोग करके अगले परिणामों की गणना कर सकते हैं।
इनपुट और आउटपुट
Input: Two strings with different letters or symbols. string 1: AGGTAB string 2: GXTXAYB Output: The length of the longest common subsequence. Here it is 4. AGGTAB and GXTXAYB. The underlined letters are present in both strings and in correct sequence.
एल्गोरिदम
longestComSubSeq(str1, str2)
इनपुट - सबसे लंबे सामान्य बाद की लंबाई को खोजने के लिए दो तार।
>आउटपुट - एलसीएस की लंबाई।
Begin m := length of str1 n := length of str2 define longSubSeq matrix of order (m+1) x (n+1) for i := 0 to m, do for j := 0 to n, do if i = 0 or j = 0, then longSubSeq[i,j] := 0 else if str1[i-1] = str2[j-1], then longSubSeq[i,j] := longSubSeq[i-1,j-1] + 1 else longSubSeq[i,j] := maximum of longSubSeq[i-1, j] and longSubSeq[i, j-1] done done longSubSeq[m, n] End
उदाहरण
#include<iostream> using namespace std; int max(int a, int b) { return (a > b)? a : b; } int longestComSs( string str1, string str2) { int m = str1.size(); int n = str2.size(); int longSubSeq[m+1][n+1]; //longSubSeq[i,j] will hold the LCS of str1 (0 to i-1) and str2 (0 to j-1) for (int i=0; i<=m; i++) { for (int j=0; j<=n; j++) { if (i == 0 || j == 0) longSubSeq[i][j] = 0; else if (str1[i-1] == str2[j-1]) longSubSeq[i][j] = longSubSeq[i-1][j-1] + 1; else longSubSeq[i][j] = max(longSubSeq[i-1][j], longSubSeq[i][j-1]); } } return longSubSeq[m][n]; } int main() { string str1 = "AGGTAB"; string str2 = "GXTXAYB"; cout << "Length of Longest Common Subsequence is: " << longestComSs( str1, str2); }
आउटपुट
Length of Longest Common Subsequence is: 4