이동 조작으로 거리 편집


13

동기 부여 : 공동 저자가 원고를 편집하고 편집 내용을 명확하게 요약하고 싶습니다. 도구 -like 모든 "DIFF는"당신이 경우에 쓸모없는 경향이 모두 주위에 텍스트를 이동 (예를 들어, 다시 조직 구조) 지역 편집을하고. 제대로 이해하기가 정말 어렵습니까?


정의 : 허용되는 작업이 다음과 같은 최소 편집 거리를 찾고 싶습니다.

  • "저렴한"작업 : 단일 문자 추가 / 변경 / 삭제 (일반적인 Levenshtein 작업)

  • "비싼"동작 : 새 위치에 문자열 (이동 D C를 B에 D 모든 문자열 , ,abcdacbdac dbc , ).d

두 개의 문자열 와 와 정수 주어짐y k Kxyk 와 다음 문제를 해결하고 싶습니다.K

  • 최대 저렴한 연산을 사용하여 최대 를 로 변환 할 수 있습니까?y k KxykK 비싼 연산을 있습니까?

질문 :

  1. 이 문제의 이름이 있습니까? (시퀀스 정렬의 맥락에서 매우 표준적인 질문처럼 들립니다.)

  2. 이게 어렵 니?

  3. 어려운 경우 고정 가능한 매개 변수입니까?K 를 매개 변수로 사용하여 습니까?

  4. 효율적인 근사 알고리즘이 있습니까? 예를 들어, 값 비싸고 값 비싼 연산이있는 솔루션이 존재 하면 최대 저렴하고 비싼 연산을 가진 솔루션을 찾으십시오 .2 K k K2k2KkK

Wikipedia에 나열된 문자열 메트릭을 보려고 했지만 그중 아무것도 올바르게 보이지 않았습니다.


3
들면 , 문제는 트랜스 포지션으로 분류된다. 예를 들어 web.cs.dal.ca/~whidden/HThesis07.pdf를 참조 하십시오. 문제가 발생하지는 않았지만 동기 부여가 잘 된 것 같습니다. k=0
Serge Gaspers 2014 년

4
전치에 의한 정렬 문제의 NP- 경도는 2010 년에 입증되었습니다 . 전치에 의한 정렬이 어렵다는 내용을 참조하십시오 .
Marzio De Biasi 2016 년

3
조옮김은 어렵지만 삽입 및 삭제는 어렵습니다. 값 비싼 조작이 임의의 하위 문자열을 삭제하거나 다른 문자열의 하위 문자열을 삽입하도록 허용하면 문제점이 매우 쉬워집니다. 그러나 결과 거리는 대칭이 아닙니다.
Jouni Sirén

고정 매개 변수 다루기 쉬움이 더 궁금합니다. 새로운 발견이 있습니까?
Yixin Cao

답변:



4

조옮김 대신 긴 삭제 및 하위 문자열 복사를 고려하면 문제가 더 쉬워집니다. 우리는 편집 거리 계산을위한 표준 동적 프로그래밍 알고리즘을 사용한다고 가정하고, 길이의 비용이 많이 드는 작업 것을 에서의 거리를 증가 K + B 일부 상수 , B 0 . 이러한 상수는 긴 삭제 및 하위 문자열 복사에서 다를 수 있습니다.kak+ba,b0

긴 삭제는 에서 임의의 하위 문자열을 삭제하는 것입니다 . 두 가지 간단한 작업으로 분류하면 첫 번째 문자 (cost a + b )를 삭제하고 한 문자 (cost a ) 만큼 삭제를 확장 할 수 있습니다. 표준 배열 이외에 , [ , j는 ] 프리픽스의 편집 거리 X [ 1 ... ]Y는 [ 1 ... J가 ] , 우리가 사용하는 다른 배열 경우 → d는xa+baAA[i,j]x[1i]y[1j]Ad마지막으로 사용한 작업이 오래 삭제되었을 때 편집 거리를 저장합니다. 이 배열로, 우리는 봐야 [ I - 1 , J ] , [ I - 1 , J - 1 ] , A는 [ , J - 1 ]경우 → D [ I - 1 , j는 ] 계산할 때 A [ i , j ]A d [ iA[i1,j]A[i1,j1]A[i,j1]Ad[i1,j]A[i,j]시간에있습니다. , 우리가 O ( 1 ) 에서 할 수있게Ad[i,j]O(1)

부분 문자열 복사 는 편집 된 문자열 에 의 임의 부분 문자열을 삽입하는 것을 의미 합니다. 긴 삭제와 마찬가지로 작업을 두 가지 간단한 작업으로 나눕니다. 첫 번째 문자 삽입과 한 문자 씩 삽입 확장. 우리는 또한 배열 사용 xAs 마지막으로 사용한 작업이 복사 하위 문자열 것을 제공 접두사 사이의 편집 거리를 저장합니다.

O(1)xO(|x|)As[i,j1]y[j]A[i,j]As[i,j]

zy[j]zAs[i,j1]xzzzy[j]xO(|z||z|)As[i,j]A[i,j|z|1]A[i,j1]zO(1)As[i,j]O(|z|)시각. 더 효율적으로 수행 할 수있는 방법이 있지만 지금은 찾을 수 없습니다.

O(min(|x||y|2,|x|2|y|))

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.