Dynamic Programming(5)

Reading time ~1 minute

인프런의 영리한 프로그래밍을 위한 알고리즘 강좌를 보고 작성한 문서입니다.


Longest Common Subsequence(LCS)

  • <bcdb>는 문자열 <abcbdab>의 subsequence이다.

  • <bca>는 문자열 <abcbdab>와 <bdcaba>의 commonsubsequence이다.

  • Longest common subsequence(LCS)

    • common subsequence들 중 가장 긴 것

    • <bcba>는 <abcbdab>와 <bdcaba>의 LCS이다


Optimal_Substructure

Optimal Substructure

순환식

Optimal_Substructure_순환식
Optimal_Substructure_순환식2

Optimal_Substructure_예

int lcs( int m, int n ){
  for ( int i = 0; i <= m; i++ )
    c[i][0] = 0;
  for ( int j = 0; j <= n; j++ )
    c[0][j] = 0;
  for ( int i = 0; i <= m; i++) {
    for ( int j = 0; j <= n; j++ ) {
      if ( x[i] == y[j] )
        c[i][j] = c[i-1][j-1] + 1;
      else
        c[i][j] = Math.max( c[i - 1][j], c[i][ j - 1]);
    }
  }
  return c[m][n];
}

시간복잡도 : θ(mn)