LCS

김민지·2023년 7월 19일
0

코딩테스트

목록 보기
29/31

LCS을 풀때 다음 점화식을 사용하는 이유

x[m]==y[n]
-> LCS[m][n] = LCS[m-1][n-1]+1
x[m]!=y[n]
-> Math.max(LCS[m-1][n], LCS[m][n-1])
  • x[m] == y[n]
    • X[m] 위치와 Y[n] 위치의 문자가 동일하면 두 시퀀스에서 공통 문자를 찾았다는 의미입니다.LCS[i-1][j-1] 테이블의 "이전 대각선 값"은 (m-1)번째 및 (n-1)번째 문자까지 두 시퀀스의 LCS 길이를 나타냅니다. m번째 및 n번째 위치에서 일치 항목을 찾았으므로 이 일치 항목을 (m-1)번째 및 (n-1)번째 위치까지 시퀀스의 LCS에 추가할 수 있습니다. 이것이 이전 대각선 값에 1을 더하는 이유입니다.
  • x[m] != y[n]
    • 이경우 LCS[m][n]가 LCS에 포함될 수 없다. 그렇기때문에 왼쪽이나 오른쪽 문자열중 하나의 문자를 제거함으로써 얻는 LCS 길이 수중 가장 큰 값을 가져가서 자신의 값으로 삼는다.

내식대로 설명해보기..

1) 둘이 같을땐 대각선 왼쪽에 있는애에다가 1을 더해
대각선왼쪽이 무엇을 의미하냐면 각 문자열에서 문자하나씩 제거한거야 지금 현재 위치에서 둘이 같으니까 이전문자열에서 하나를더하는거임 (나도먼말인지모르겠음 )
2. 둘이 같지않을땐 위아니면 왼족옆에있는 값중에서 큰값을 선택함
왜냐면 현재값은 lcs가 아니기때문에 이전값을 그대로 가져와야하는데 이전값은 문자열a에서 문자하나제거한거 or 문자열 b에서 문자하나제거한거
이기때문!

profile
안녕하세요!

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기