두 문자열 s
및 t
이 주어졌습니다. s
에있는 각 부분 문자열을 찾을 필요가 있습니다. t
까지 거리 (Levenshtein distance). 사실 각각 i
의 위치는 s
에 있어야합니다. 위치는 i
에서 시작된 모든 부분 문자열의 최소 편집 거리입니다.모든 부분 문자열에 대한 편집 거리를 찾는 알고리즘
:
t = "ab"
s = "sdabcb"
그리고 내가 좋아하는 뭔가를 얻을 필요가 :
{2,1,0,2,2}
설명 : 등등
1st position:
distance("ab", "sd") = 4 (2*subst)
distance("ab", "sda") = 3(2*delete + insert)
distance("ab", "sdab") = 2 (2 * delete)
distance("ab", "sdabc") = 3 (3 * delete)
distance("ab", "sdabcb") = 4 (4 * delete)
So, minimum is 2
2nd position:
distance("ab", "da") = 2 (delete + insert)
distance("ab", "dab") = 1 (delete)
distance("ab", "dabc") = 2 (2*delete)
....
So, minimum is 1
3th position:
distance("ab", "ab") = 0
...
minimum is 0
하고 있습니다.
나는이 작업을 해결하기 위해 무차별 대입 알고리즘을 사용할 수 있습니다. 하지만 더 빠른 알고리즘이 있습니까?
도움 주셔서 감사합니다.
인접한 숫자가 최대 1만큼 다를 수 있기 때문에'{2,1, ** 0,2 **, 2} '라는 대답이 잘못되었음을 알고 있습니다 : 하위 문자열's [i..j ]'를 최소 편집 거리'k '에서't'로 설정하면, 부분 문자열'[(i + 1) .. j]'는 첫 번째 편집 작업을함으로써''k + 캐릭터 라인의 맨 처음에's [i]'를 삽입합니다. 귀하의 예에서 네 번째 위치의 경우 distance ("ab", "b") = 1 (1 insert) 및 5의 경우 distance ("ab", "cb") = 1 " . –