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


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.