일련의 (삽입, 이동, 삭제) 작업으로 임의 순열 표현


9

두 개의 줄이 있다고 가정하십시오. 그들을 와 부릅니다 . 두 문자열 모두 반복되는 문자가 없습니다.

를 로 바꾸는 가장 짧은 삽입, 이동 및 삭제 작업 순서를 어떻게 찾을 수 있습니까?

  • insert(char, offset)char주어진 offset문자열에 삽입
  • move(from_offset, to_offset)현재 오프셋 from_offset에있는 문자 를 새로운 위치 로 이동하여 오프셋 을 갖습니다.to_offset
  • delete(offset) 에서 문자를 삭제합니다 offset

응용 프로그램 예 : 데이터베이스 쿼리를 수행하고 웹 사이트에 결과를 표시합니다. 나중에 데이터베이스 쿼리를 다시 실행하고 결과가 변경되었음을 알 수 있습니다. 최소 DOM 조작 수를 사용하여 현재 데이터베이스에있는 내용과 일치하도록 페이지에있는 내용을 변경하려고합니다. 가장 짧은 작업 순서를 원하는 데는 두 가지 이유가 있습니다. 첫째, 효율성. 레코드가 몇 개만 변경되면영형(1) 오히려 영형()DOM 조작은 비싸기 때문에. 둘째, 정확성. 항목이 한 위치에서 다른 위치로 이동 한 경우 연결된 DOM 노드를 파괴하거나 다시 만들지 않고 단일 작업으로 이동하려고합니다. 그렇지 않으면 포커스 상태, <input>요소 의 내용 등이 손실 됩니다.

답변:


10

편집 거리 알고리즘을 살펴 보는 것이 좋습니다 . 거리를 계산하는 대신 배열을 통해 최소 무게 경로를 기록하고 반환해야합니다.


5
실제로 반복이 없기 때문에 이것은 Ulam 거리 문제라고하는 약간 더 간단한 문제입니다. 거리 편집 알고리즘을 사용할 수 있지만이 거리를 목표로하는 더 빠른 방법도 있습니다 : mit.edu/~andoni/papers/ulamSublinear.pdf
Suresh

1
편집 거리는 일반적으로 move연산을 다루지 않으므로 점수를 해석 할 때 다를 수 있습니다.
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.