Dynamic Programming Flashcards

1
Q

Longest Common Subsequence

A
/* Returns length of LCS for X[0..m-1], Y[0..n-1] */
  int lcs( char[] X, char[] Y, int m, int n ) 
  { 
    int L[][] = new int[m+1][n+1]; 
    /* Following steps build L[m+1][n+1] in bottom up fashion. Note 
         that L[i][j] contains length of LCS of X[0..i-1] and Y[0..j-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]); 
      } 
    } 
  return L[m][n]; 
  }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Longest Common Substring

A
int longestCommonSubString(char[] word1, char[] word2, int m, int n)
	{
		int[][] table = new int[m+1][n+1];
		int max = 0;
		for (int i = 0; i <= m;i++)
		{
			for (int j = 0; j <= n;j++)
			{
				if (i == 0|| j == 0)
					table[i][j] =0;
				else if (word1[i-1] == word2[j -1])
				{
					table[i][j] = 1+table[i-1][j-1];
					if (max < table[i][j]) max = table[i][j];
				}
				else if (word1[i-1] != word2[j-1])
				{
					table[i][j] = 0;
				}
			}
		}
		return max;
	}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly