LCS(longest common sequence) - 공통되는 최장 부분수열
string f = ACAYKP
string s = CACANK
이렇게 두 문자열이 있다면 공통되는 최대 길이의 부분수열은 A C A K -> 4 가 된다.
LCS 는 DP 를 통해서 구현되며
LCS4 번 문제같은 조건이 주어진 숫자의 경우 lis 알고리즘으로 해결한다.
(나중에 공부하고 포스팅해야지)
기본적으로 두 문자열에 대한 dp[][] 를 선언으로 시작한다.
한 문자열에 대해서 다른 문자열의 각 문자를 전부 비교한다.
f[i] == s[k] 이면 dp[i][k] = dp[i-1][k-1]+1;
f[i] != s[k] 이면 dp[i][k] = max(dp[i-1][k], dp[i][k-1]);
************************************************************************
부분수열이 아닌 문자열을 찾는 것이라면
f[i] == s[k] 이면 dp[i][k] = dp[i-1][k-1]+1;
위 점화식을 이용하여 공통된 문자열의 최대 길이를 찾을 수 있다.
ex)
ACACK
CACIP
--> CAC : 3
************************************************************************
'algorithm > algorithm' 카테고리의 다른 글
볼록껍질 선분 처리하기 (0) | 2020.02.28 |
---|---|
유클리드 호제법 (0) | 2020.02.28 |
세그먼트 트리 정리 (0) | 2020.02.05 |
선분 교차 판별하기 (0) | 2020.02.02 |
삼분 탐색(Ternary search) (0) | 2020.01.16 |