해뜨기전에자자

문자열 유사도 알고리즘 Needleman-Wunch, Smith-Waterman 본문

개발/algorithm

문자열 유사도 알고리즘 Needleman-Wunch, Smith-Waterman

조앙'ㅁ' 2019. 3. 8. 00:02

fzf에서 문자열 서치 알고리즘으로 뭘 사용하는지 찾아보다가 정리해둔다.


차이점 위주로


Needleman-Wunch

두 문자열의 전체 유사도


https://en.wikipedia.org/wiki/Needleman–Wunsch_algorithm


padding 전략: 맨 왼쪽 위 값을 0으로 주고 indel 이 발생했다고 가정한다. gap으로 채워지게 됨.

점화식:H[i][j] = max(H[i-1][j-1] + match or mismatch, H[i-1][j] + gap, H[i][j-1] + gap)

trace back 시작점: H[str1.length][str2.length] 그러니까 .. 테이블 오른쪽 맨 아래 셀


Smith-Waterman

두 문자열의 지역 유사도


https://en.wikipedia.org/wiki/Smith–Waterman_algorithm


padding 전략: 모두 0으로 채움 

점화식:H[i][j] = max(H[i-1][j-1] + match or mismatch, H[i-1][j] + gap, H[i][j-1] + gap, 0)

trace back 시작점: high score인 셀


이때 0을 줌으로써 테이블에 음수가 들어가지 않게되고, 이로 인해 지역적으로 high score인 곳이 best match이게 된다.


그래서 smith waterman 에서 high score 값을 구하면 문자열이 얼마나 유사한지 점수화 할 수 있다. 


더 생각해볼만한것

gap, 즉 indel 가중치가 서로 달라질수있다. 이 경우는 가중치를 크게준 쪽이 traceback으로 채택될 가능성이 낮아진다.

'개발 > algorithm' 카테고리의 다른 글

Log Structured Merged Tree - LSMTree  (0) 2020.06.21
Cassandra: CRDT  (0) 2018.10.28
bloom filter  (0) 2018.08.18