Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

सबसे लंबा कॉमन सबसीक्वेंस

सबसे लंबा कॉमन सबसीक्वेंस (LCS) एक प्रकार का सबसीक्वेंस है जो दी गई दोनों सीक्वेंस या ऐरे में मौजूद होता है।

हम देख सकते हैं कि कई सबप्रॉब्लम्स हैं, जिन्हें इस समस्या को हल करने के लिए बार-बार गणना की जाती है। डायनामिक प्रोग्रामिंग के ओवरलैपिंग सबस्ट्रक्चर प्रॉपर्टी का उपयोग करके, हम कम्प्यूटेशनल प्रयासों को कम कर सकते हैं। एक बार सबप्रॉब्लम्स के परिणाम गणना करके टेबल में स्टोर हो जाने पर, हम पिछले परिणामों का उपयोग करके अगले परिणामों की गणना कर सकते हैं।

इनपुट और आउटपुट

इनपुट: अलग-अलग अक्षरों या प्रतीकों वाली दो स्ट्रिंग्स।
स्ट्रिंग 1: AGGTAB
स्ट्रिंग 2: GXTXAYB

आउटपुट: सबसे लंबे कॉमन सबसीक्वेंस की लंबाई। यहां यह 4 है।
AGGTAB और GXTXAYB। अंडरलाइन किए गए अक्षर दोनों स्ट्रिंग्स में हैं और सही क्रम में हैं।

एल्गोरिदम

longestComSubSeq(str1, str2)

इनपुट: LCS की लंबाई ढूंढने के लिए दो स्ट्रिंग्स
आउटपुट: LCS की लंबाई

शुरुआत
    m := str1 की लंबाई
    n := str2 की लंबाई
    (m+1) x (n+1) ऑर्डर की longSubSeq मैट्रिक्स परिभाषित करें
    i := 0 से m तक, करें
        j := 0 से n तक, करें
            यदि i = 0 या j = 0, तो
                longSubSeq[i,j] := 0
            अन्यथा यदि str1[i-1] = str2[j-1], तो
                longSubSeq[i,j] := longSubSeq[i-1,j-1] + 1
            अन्यथा
                longSubSeq[i,j] := longSubSeq[i-1, j] और longSubSeq[i, j-1] का अधिकतम
        पूर्ण
    पूर्ण
    longSubSeq[m, n]
अंत

उदाहरण (C++ कोड)

#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];
    
    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
  1. - C++ प्रोग्राम: लॉन्गेस्ट कॉमन सबसीक्वेंस (LCS)

    एक सबसीक्वेंस तत्वों के समूह का वही क्रम वाला अनुक्रम है। अनुक्रम stuv के लिए, सबसीक्वेंस हैं stu, tuv, suv, आदि। लंबाई n के एक स्ट्रिंग के लिए, उस स्ट्रिंग से सबसीक्वेंस बनाने के 2^n तरीके हो सकते हैं। उदाहरण स्ट्रिंग्स ABCDGH और AEDFHR के लिए सबसे लंबी सामान्य सबसीक्वेंस की लंबाई 3 है। #include &l

  1. - सबसे लंबी सामान्य उपअनुक्रम के लिए जावा प्रोग्राम

    सबसे लंबी सामान्य उपअनुक्रम के लिए जावा प्रोग्राम निम्नलिखित है: उदाहरण public class Demo{ int subseq(char[] a, char[] b, int a_len, int b_len){ int my_arr[][] = new int[a_len + 1][b_len + 1]; for (int i = 0; i <= a_len; i++){ for (int j = 0; j <= b_len; j+

  1. - पायथन में तीन स्ट्रिंग्स के सबसे लंबे कॉमन सबसीक्वेंस की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास तीन स्ट्रिंग्स s1, s2, और s3 हैं, हमें उनके सबसे लंबे कॉमन सबसीक्वेंस की लंबाई ढूंढनी है।उदाहरण के लिए, यदि इनपुट s1 = ababchemxde, s2 = pyakcimde, s3 = oauctime है, तो आउटपुट 4 होगा, क्योंकि सबसे लंबा कॉमन सबसीक्वेंस acme है।समाधान दृष्टिकोणइस समस्या को हल करने के लिए हम 3D डायन