- 여기에서는 두가지를 다룬다.
- longest common subsequence
- longest common substring
- 두 개념의 약어는 모두 LCS... 이다.
- 두 개념이 헷갈릴 수 있어서... 같이 정리해본다.
- longest common subsequence
- 한국어로는 최장 공통 부분 수열이라고 한다.
- 최장 공통 부분 수열은? 두 문자열에 공통적으로 존재하는 가장 긴 부분 수열이다.
- 여기서 주목할 점은 부분 수열이니 연속된 것이 아니라는 점이다.
예제를 들어 설명해본다.
아주 간단해보인다.
- 하지만, 이 알고리즘은 diff 알고리즘의 근간이 된다.
- 그만큼 중요한 알고리즘이며, 그리고... 문제를 풀때는... 간단하지도 않다.
- 하지만, 이 알고리즘은 diff 알고리즘의 근간이 된다.
- 문제를 푸는 방법
식으로 정리하면
최장 공통 부분 수열과 관련된 알고리즘으로는... '최장 공통 부분 수열의 길이를 구하는 로직'이다.
테이블을 만든다. 아래처럼... 위 식을 참고해서...(이 부분은 나중에 시간나면 정리하는 것으로...한다)
0abcbdab0 Ø Ø Ø Ø Ø Ø Ø Ø b Ø Ø b b b b b b c Ø d Ø b Ø
- 참고 링크 : http://ko.wikipedia.org/wiki/최장_공통_부분_수열
longest common substring
최장 공통 부분 문자열
- 최장 공통 부분 문자열의 가장 큰 특징은!! 연속된 문자열이라는 점이다.
- 이 부분은 longest common subsequence와 다른 점이다.
예제를 들어 설명해보면...
longest common substring을 찾기 위해서 주로 suffix tree를 사용한다.(wiki를 보니 Dynamic programming으로 해결하는 방법도 있었다.)
- suffix tree는 string의 모든 substirng을 tree 형태로 나타낸 것이다.
- suffix tree를 통해 부분 문자열에 대한 연산을 할 수 있다.
- suffix tree는 string의 모든 substirng을 tree 형태로 나타낸 것이다.
- 최장 공통 부분 문자열의 가장 큰 특징은!! 연속된 문자열이라는 점이다.
- 참고 링크
- longest common substring wiki : http://en.wikipedia.org/wiki/Longest_common_substring_problem
- suffix tree wiki : http://en.wikipedia.org/wiki/Suffix_tree
- suffix array에 대한 설명 : http://blog.sbnet21.com/1755, http://crack-tech-interview.com/2014/04/09/suffix-tree-%EC%99%80-%EC%9D%B4%EC%9D%98-%EA%B0%84%EB%8B%A8%ED%95%9C-application/
- 사설...
- 문제를 어떻게 풀 수 있는지... 그리고 suffix tree를 어떤 형태로 구현하고, 또 사용할 수 있는지에 대해서도 정리하고 싶었지만... 시간 관계상 이정도 선에서 마무리한다.
- 다음에 기회가 된다면, 좀 더 정리할 것이다.
본 글은 회사 위키에 작성한 글과 동일합니다.
'Computer > Etc' 카테고리의 다른 글
github gist (0) | 2015.01.03 |
---|---|
Loop Invariant (0) | 2015.01.01 |
Excel에서 조건부 수식을 사용해서 줄단위 색 입히기 (0) | 2014.12.05 |
long-tail vs short head (0) | 2014.12.03 |
svn에서 다른 리비전간에 diff 하기 (0) | 2014.11.25 |