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

C++ में लेक्सिकोग्राफिकल क्रम में सभी सबसे लंबे सामान्य उपअनुक्रम प्रिंट करें


इस समस्या में, हमें दो स्ट्रिंग str1 और str2 दी गई हैं। हमारा कार्य लेक्सिकोग्राफिकल क्रम में सभी सबसे लंबे सामान्य उपअनुक्रम प्रिंट करने के लिए एक प्रोग्राम बनाना है। 

एक उदाहरण लेकर समस्या को समझते हैं, 

इनपुट: str1 = “gfare” ,  str2 = “rfare”

आउटपुट: fare

समाधान दृष्टिकोण

इस समस्या में, हम सभी संभावित सबसे लंबे सामान्य उपअनुक्रम खोजेंगे और उन्हें डायनामिक प्रोग्रामिंग का उपयोग करके 2D मैट्रिक्स में स्टोर करेंगे। इसके बाद, हम क्रमबद्ध आउटपुट प्रिंट करेंगे LCS में a से z तक कैरेक्टर्स खोजकर।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,

उदाहरण

#include<iostream> #include<cstring> #define MAX 100 using namespace std; int LCSLength = 0; int DP[MAX][MAX]; int calcLCSLenght(string str1, string str2, int l1, int l2, int i, int j) {        int &lcsLen = DP[i][j];    if (i==l1 || j==l2)       return lcsLen = 0;    if (lcsLen != -1)       return lcsLen;    lcsLen = 0;        if (str1[i] == str2[j])       lcsLen = 1 + calcLCSLenght(str1, str2, l1, l2, i+1, j+1);    else       lcsLen = max(calcLCSLenght(str1, str2, l1, l2, i+1, j), calcLCSLenght(str1, str2, l1, l2, i, j+1));    return lcsLen; } void printAllLCS(string str1, string str2, int l1, int l2, char data[], int index1, int index2, int currentLCSlength) {    if (currentLCSlength == LCSLength) {             data[currentLCSlength] = '\0';       puts(data);       return;    }    if (index1==l1 || index2==l2)       return;    for (char ch='a'; ch<='z'; ch++) {             bool done = false;       for (int i=index1; i<l1; i++) {          if (ch==str1[i]) {             for (int j=index2; j<l2; j++) {                if (ch==str2[j] && calcLCSLenght(str1, str2, l1, l2, i, j) == LCSLength-currentLCSlength) {                   data[currentLCSlength] = ch;                   printAllLCS(str1, str2, l1, l2, data, i+1, j+1, currentLCSlength+1);                   done = true;                   break;                }             }          }          if (done)             break;       }    } } int main() {        string str1 = "xysxysx", str2 = "xsyxsyx";        int l1 = str1.length(), l2 = str2.length();    memset(DP, -1, sizeof(DP));    LCSLength = calcLCSLenght(str1, str2, l1, l2, 0, 0);    char data[MAX];    cout<<"All longest common sub-sequences in lexicographical order are\n";    printAllLCS(str1, str2, l1, l2, data, 0, 0, 0);    return 0; }

आउटपुट

All longest common sub-sequences in lexicographical order are xsxsx xsxyx xsysx xysyx xyxsx xyxyx

  1. C++ में अप्रत्यक्ष ग्राफ (Undirected Graph) में सभी चक्र (Cycles) प्रिंट करें C++ में अप्रत्यक्ष ग्राफ (Undirected Graph) में सभी चक्र (Cycles) प्रिंट करें

    इस समस्या में, हमें एक अप्रत्यक्ष ग्राफ दिया गया है और हमें ग्राफ में बने सभी चक्रों को प्रिंट करना है। अप्रत्यक्ष ग्राफ एक ग्राफ है जो एक साथ जुड़ा हुआ है। अप्रत्यक्ष ग्राफ के सभी किनारे द्विदिशात्मक हैं। इसे अप्रत्यक्ष नेटवर्क के रूप में भी जाना जाता है। चक्र ग्राफ डेटा संरचना में एक ग्राफ है जिसम

  1. C++ में बाइनरी ट्री के स्तरों को सॉर्ट क्रम में प्रिंट करें C++ में बाइनरी ट्री के स्तरों को सॉर्ट क्रम में प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है और हमें प्रत्येक स्तर पर सभी नोड्स को उनके मानों के सॉर्ट क्रम में प्रिंट करना है। आइए एक उदाहरण लेकर अवधारणा को बेहतर ढंग से समझते हैं, इनपुट - आउटपुट - 20 6 15 2 17 32 78 इस समस्या को हल करने के लिए, हमें ट्री के प्रत्येक स्तर का सॉर्ट क्रम प्रिंट कर

  1. - C++ प्रोग्राम: लॉन्गेस्ट कॉमन सबसीक्वेंस (LCS)

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