2013-12-19 3 views
5

요약하면 두 개의 배열이 다를 수 있습니다. 차이점/변형을 일련의 "동작"(추가 및 제거)으로 사용하고 싶습니다. 즉 기본 예제입니다 :일련의 동작으로 배열 차이가 있습니다.

Current: [a, b, d] 
Desired: [a, b, c, d] 
Actions: Add c in position 2 

기본적으로 명령어가 원하는 배열과 같은 회원들과 순서를 가지고 있도록 현재의 배열을 변환하는 방법입니다. 내 응용 프로그램의 경우 각 변경 사항은 UI 등을 업데이트하는 이벤트를 트리거하므로 "중복"이 아닌 경우에는 위의 내용이 remove d, add c @ 2, add d @ 3 일 수 있지만 매우 바람직합니다. 그러나 위의 경우는 다른 곳에서 많은 원치 않는 처리가 발생할 수 있습니다. 시스템에서.

아마도 설명 도움이 될 또 다른 예로서 :

Current: [a, b, d] 
Desired: [b, c, d, a] 
Actions: remove a, add c @ 1, add a @ 3 

을 나는 그림이 이전에 해결 된 일이지만 "배열의 차이"이후 검색하기 좀 어려운 당신에게 제공하지 않습니다 올바른 결과.

중요한 점은 자바 스크립트로 구현하고 있지만 알고리즘은 언어에 구애받지 않는다고 생각합니다.

+0

당신은'diff' 유틸리티와 같은 것을 찾고 있습니까? –

답변

7

이것은 실제로 존재하며, edit distance이라고합니다. 기본 알고리즘은 편집 내용을 기억하지 않지만 쉽게 수정할 수 있습니다.

편집 거리의 한 유형은 Levenshtein distance입니다. 이 위키 피 디아 페이지에는 유용한 코드 스 니펫이 포함되어 있습니다.

Hirschberg's algorithm 또한 유용 할 수 있습니다.

+0

물론 아! Hirschberg 알고리즘이 내가 찾고있는 것과 더 가깝게 보일 것 같습니다. 올바른 길로 데려와 줘서 고마워. http://en.wikipedia.org/wiki/Hirschberg's_algorithm – nickf

+0

스택 오버플로는 다음과 같습니다. – Noctua

관련 문제