2017-03-10 6 views
-1

크기와 구조가 다른 N 개의 나무가 있다고 가정 해 보겠습니다. 모든 나무 사이에서 유사한 가지를 찾는 가장 좋은 방법은 무엇입니까? 궁극적 인 목표는 모든 유사한 하위 트리를 찾아 가장 긴 유사한 분기 (트리 수준)에서 가장 짧은 하위 트리까지 정렬하는 것입니다.여러 트리에서 유사한 지점 찾기

enter image description here

질문의 목적은 비슷한을 찾는는 여러 쿼리 중 조인. 각 쿼리를 트리로 표시하면 조인은 각 수준의 분기를 만듭니다. 그리고 모든 쿼리 중에서 유사한 조인을 찾으려고합니다.

+0

"유사"를 정의하십시오. 정확한 구조를 의미합니까? 구조와 상관없이 서브 트리 노드가 내용이 동일하거나 비슷한 것을 의미합니까? "비슷한"이라는 정의가 없다면 질문에 대답 할 수있는 방법이 전혀 없습니다. –

+0

비슷한 의미로 정확한 구조를 의미했습니다. –

+0

좋아, 정확한 구조. 내용이 중요합니까? –

답변

1

테이블 이름에서 트리 (트리, 위치 트리) 목록으로 맵을 작성하는 것으로 시작하십시오. 이것을 빌드 할 때 동일한 테이블이 두 번 참조되는 위치를 찾을 수 있습니다. 트리 노드의 두 자식이 모두있는 곳을 주목하십시오.

노드의 하위 노드가 모두있는 곳을 방문하십시오. 트리에서 이러한 하위 및 해당 상위 항목을 제거하고 방금 제거한 두 테이블이 같은 테이블 이름을 사용하여 새 테이블 이름으로 바꿉니다. 지도를 업데이트 할 때 최대 깊이 1의 하위 트리가 트리에서 두 번 참조되는 위치를 확인할 수 있습니다. 이 편집이 나무 노드의 자식 노드가 모두있는 새 장소를 생성 한 곳을 적어 두십시오.

반복 원래의 트리에, 우리는 당신이 아닌 존재로 모든 나무를 편집 할 때까지 2

계속 최대 깊이의 동일한 하위 트리를 가지고 장소를 감지하기 이전 단락. 이제 모든 하위 트리 일치가 최대 깊이의 역순으로 발견되었습니다.