X = ABCBDAB

Y = BDCABA

가장 긴 길이의 공통 부 문자열을 찾는 문제

DP 문제

Xn = x1x2x3..xn. X3 = x1x2x3

Ym = y1y2y3..ym. Y2 = y1y2

LCS(Xn, Ym) ⇒ Xn 과 Ym 의 가장 긴 공통 부 문자열의 길이

위 식을 작은 문제로 쪼개야 한다.

LCS(Xi, Yj) ⇒ Xi 과 Yj 의 가장 긴 공통 부 문자열의 길이

xi 와 yj 가 같은 경우와 다른경우

같은 경우 : LCS(Xi, Yj) = LCS(Xi-1,Yj-1) + 1

다른 경우: LCS(Xi,Yj)= max(LCS(Xi,Yj-1), LCS(Xi-1, Yj))

스크린샷 2023-03-06 오후 1.16.36.png

스크린샷 2023-03-06 오후 1.27.41.png

스크린샷 2023-03-06 오후 1.35.47.png

만약에 최장 공통 부분 수열의 길이가 아니라 수열 자체를 구하고 싶다면 맨 아래에서 부터

역행 하면 된다 LCS(7,6)에서 시작해서 위 와 왼쪽 둘중에 하나로 이동하면 된다.

7,6 에서 위와 왼쪽이 똑같으니 아무 쪽으로 가도 된다. 이때 위로 가보자 6,6 이때 x6 == y6 이니까

최장 공통 부분 수열의 마지막에 A가 들어간다.그리고 하나를 넣었으니 왼쪽 위 대각 으로 이동한다 5,5

x5 ≠ y5 이니까 왼쪽과 위 중에 큰 값으로 이동 4,5 이때 x4 == y5 니까 또 B 넣고 왼쪽 위 대각 이동

이런 식으로 채운다.