위키득계정 ↗
기술

레벤슈타인 거리

레벤슈타인 거리기술
영문명
Levenshtein distance
허용 연산
삽입, 삭제, 치환
기본 비용
각 연산 1
구하는 값
가능한 편집 중 최소 비용
레벤슈타인 거리는 한 문자열을 다른 문자열로 바꾸는 데 필요한 문자 삽입, 삭제, 치환의 최소 횟수다. 각 연산 비용을 1로 두는 기본 형태에서 두 문자열의 차이를 수치로 나타낸다.

작은 변화의 예

CAT을 COAT으로 바꾸려면 O를 한 번 삽입하면 되므로 거리는 1이다. CAT과 CUT은 가운데 문자를 치환해 거리 1을 얻는다. 단순히 같은 위치의 문자만 비교하는 것이 아니라 길이 변화도 허용한다.

최소라는 조건

불필요하게 문자를 넣었다 지우면 같은 결과를 더 많은 연산으로 만들 수 있다. 거리는 그런 모든 편집 경로 가운데 가장 적은 횟수를 택한다. 어떤 경로 하나를 찾은 값은 최소값의 상한일 뿐일 수 있다.

동적 계획법

두 문자열의 앞부분 사이 거리를 표로 저장하고 마지막 연산이 삽입, 삭제, 치환인 경우를 비교할 수 있다. 길이가 m과 n인 문자열의 기본 표 계산은 O(mn) 시간에 수행된다. 빈 문자열과의 거리는 상대 문자열의 길이다.

다른 거리와 구별

기본 레벤슈타인 거리는 이웃 두 문자를 맞바꾸는 연산을 한 번으로 세지 않는다. AB와 BA의 거리는 2다. 맞바꿈을 별도 연산으로 허용하거나 연산 비용을 다르게 두면 다른 거리 정의가 된다.

관련 문서

문자열 / 동적 계획법 / 해밍 거리 / 최장 공통 부분 수열 / 알고리즘 / 시간 복잡도 / 배열