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

सबसे छोटा सामान्य सुपर अनुक्रम


सबसे छोटा सामान्य सुपर-सीक्वेंस एक ऐसा क्रम है जहां दिए गए दोनों अनुक्रमों का प्रत्येक तत्व मौजूद होता है। दूसरे शब्दों में, हम कह सकते हैं कि दिए गए दो स्ट्रिंग्स, दोनों शॉर्टेस्ट कॉमन सुपर-सीक्वेंस के सब-सीक्वेंस हैं।

जब दो स्ट्रिंग्स में कोई सामान्य वर्ण नहीं होते हैं, तो हम उन्हें सुपर-सीक्वेंस प्राप्त करने के लिए बस जोड़ सकते हैं। लेकिन जब उनके पास कुछ सामान्य वर्ण हों, तो सबसे पहले हमें सबसे लंबी स्ट्रिंग ढूंढनी होगी, फिर दूसरी स्ट्रिंग के अतिरिक्त वर्ण जोड़ने होंगे।

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

Input:
Two strings. “ABCDEF” and “XYDEF”
Output:
The length of the shortest common super-sequence.
Here the super-sequence is “ABCDEFXY”. So the length is 8.

एल्गोरिदम

superSeq(str1, str2)

इनपुट: दो तार str1 और str2।

आउटपुट: सुपर सीक्वेंस की लंबाई ज्ञात कीजिए।

Begin
   m := length of str1
   n := length of str2
   define table named seqTab of size (m+1 x n+1)

   for i := 0 to m, do
      for j := 0 to n, do
         if i = 0, then
            seqTab[i, j] := j
         else if j = 0, then
            seqTab[i, j] := i
         else if str1[i-1] = str2[j-1], then
            seqTab[i, j] := 1 + seqTab[i-1, j-1]
         else
            seqTab[i, j] := 1 + minimum of seqTab[i-1, j] and seqTab[i, j-1]
      done
   done
   return seqTab[m, n]
End

उदाहरण

#include<iostream>
using namespace std;

int min(int a, int b) {
   return (a<b)?a:b;
}

int superSeq(string str1, string str2) {
   int m = str1.size();
   int n = str2.size();

   int supSeqTable[m+1][n+1];

   for (int i = 0; i <= m; i++) {
      for (int j = 0; j <= n; j++) {
         if (!i)
            supSeqTable[i][j] = j;              //shortest supersequence length is j
         else if (!j)
            supSeqTable[i][j] = i;                //shortest supersequence length is i
         else if (str1[i-1] == str2[j-1])
            supSeqTable[i][j] = 1 + supSeqTable[i-1][j-1];
         else
            supSeqTable[i][j] = 1 + min(supSeqTable[i-1][j], supSeqTable[i][j-1]);
      }
   }
   return supSeqTable[m][n];
}

int main() {
   string first = "ABCDEF";
   string second = "XYDEF";
   cout << "Length of the shortest supersequence is " << superSeq(first, second);
}

आउटपुट

Length of the shortest supersequence is 8

  1. बिल्कुल k किनारों वाला सबसे छोटा रास्ता

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

  1. सबसे लंबा सामान्य परिणाम

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

  1. एकल-स्रोत सबसे छोटा पथ, मनमाना भार

    सिंगल सोर्स शॉर्टेस्ट पाथ एल्गोरिथम (मनमाने ढंग से वजन सकारात्मक या नकारात्मक के लिए) को बेलमैन-फोर्ड एल्गोरिथम के रूप में भी जाना जाता है, जिसका उपयोग स्रोत के शीर्ष से किसी अन्य शीर्ष तक न्यूनतम दूरी खोजने के लिए किया जाता है। दिज्क्स्ट्रा के एल्गोरिथ्म के साथ इस एल्गोरिथ्म के बीच मुख्य अंतर यह है