//a dynamic approach to LCS probelm
// prints the LCS of two strings O(mn)
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
int max(int a, int b)
{
return a > b ? a : b;
}
//evaluates length of LCS n print it for X[ 0 .. m-1] , Y[ 0 ... n-1 ]
void lcs(char *X, char * Y, int m, int n)
{
int L[m + 1][n + 1];
for (int i = 0; i <= m; ++i)
{
for (int j = 0; j <= n; ++j)
{
if (i == 0 || j == 0)
L[i][j] = 0;
else if (X[i - 1] == Y[j - 1])
L[i][j] = L[i - 1][j - 1] + 1;
else
L[i][j] = max(L[i - 1][j], L[i][j - 1]);
}
}
int i = m, j = n;
int index = L[m][n];
//array with final LCS
char lcs[index + 1];
lcs[index] = '\0'; // string terminator
while (i > 0 && j > 0)
{
if (X[i - 1] == Y[j - 1])
{
lcs[index - 1] = X[i - 1];
--i, --j, --index;
}
else if (L[i - 1][j] > L[i][j - 1])
--i;
else
--j;
}
cout << " LCS OF " << X << " and " << Y << " is " << lcs;
}
/* Driver program to test above function */
int main()
{
char X[] = "AGGTAB";
char Y[] = "GXTXAYB";
int m = strlen(X);
int n = strlen(Y);
lcs(X, Y, m, n);
return 0;
}
// prints the LCS of two strings O(mn)
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
int max(int a, int b)
{
return a > b ? a : b;
}
//evaluates length of LCS n print it for X[ 0 .. m-1] , Y[ 0 ... n-1 ]
void lcs(char *X, char * Y, int m, int n)
{
int L[m + 1][n + 1];
for (int i = 0; i <= m; ++i)
{
for (int j = 0; j <= n; ++j)
{
if (i == 0 || j == 0)
L[i][j] = 0;
else if (X[i - 1] == Y[j - 1])
L[i][j] = L[i - 1][j - 1] + 1;
else
L[i][j] = max(L[i - 1][j], L[i][j - 1]);
}
}
int i = m, j = n;
int index = L[m][n];
//array with final LCS
char lcs[index + 1];
lcs[index] = '\0'; // string terminator
while (i > 0 && j > 0)
{
if (X[i - 1] == Y[j - 1])
{
lcs[index - 1] = X[i - 1];
--i, --j, --index;
}
else if (L[i - 1][j] > L[i][j - 1])
--i;
else
--j;
}
cout << " LCS OF " << X << " and " << Y << " is " << lcs;
}
/* Driver program to test above function */
int main()
{
char X[] = "AGGTAB";
char Y[] = "GXTXAYB";
int m = strlen(X);
int n = strlen(Y);
lcs(X, Y, m, n);
return 0;
}
No comments:
Post a Comment