편집 거리 계산을위한 미세 최적화 : 유효합니까?


10

위키 백과 , 편집 거리 상향식 동적 프로그래밍 방식의 구현이 제공됩니다. 정의를 완전히 따르지 않습니다. 내부 셀은 다음과 같이 계산됩니다.

if s[i] = t[j] then  
  d[i, j] := d[i-1, j-1]       // no operation required
else
  d[i, j] := minimum
             (
               d[i-1, j] + 1,  // a deletion
               d[i, j-1] + 1,  // an insertion
               d[i-1, j-1] + 1 // a substitution
             )
}

보시다시피, 알고리즘 은 일치하는 경우 항상 왼쪽 상단 이웃에서 값을 선택하여 일부 메모리 액세스, ALU 작업 및 비교를 저장합니다.

그러나, 삭제 (또는 삽입)는 더 작은 값을 초래할 수 있으며 , 따라서 알고리즘은 국부적으로 부정확하다. 즉, 최적의 기준에 위반된다. 그러나 실수로 인해 최종 결과가 변경되지 않을 수 있습니다. 취소 될 수 있습니다.

이 미세 최적화가 유효합니까? 왜 그렇지 않습니까?

답변:


6

알고리즘에 결함이 있다고 생각하지 않습니다. 두 개의 문자열이 일치하면 마지막 두 문자를 먼저 비교 한 다음 재귀합니다. 동일한 경우 최적의 정렬을 위해 일치시킬 수 있습니다. 예를 들어, 문자열 test및을 고려하십시오 testat. 두 개의 마지막을 일치시키지 않으면 ts 중 하나가 일치하지 않습니다. t그렇지 않으면 일치하는 모양이 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

화살표가 "교차"할 수 없으므로 불가능합니다. 일치 t된 부분은 왼쪽에 표시된대로 여러 삽입물 (그림의 녹색 상자)을 유도합니다.

여기에 이미지 설명을 입력하십시오

그러나 오른쪽에 묘사 된 것과 똑같이 좋은 정렬을 찾을 수 있습니다. 두 경우 모두 a t와 일치하고 두 개의 삽입물이 있습니다.

마지막 ts 중 하나의 대체에 대한 인수 는 동일합니다. 따라서 마지막 ts 중 하나를 대체 하면 대신 마지막 두 t를 일치시키고 더 나은 정렬을 얻을 수 있습니다 (그림 참조).

여기에 이미지 설명을 입력하십시오


아, 상향식 문제에 대한 하향식 논쟁. 좋은!
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.