트리 모음을 검색하기위한 효율적인 알고리즘


9

나는 나무의 큰 데이터 세트를 가지고 내가 지정하여 검색하고자하는 treelet (연결 서브 그래프 참조). 쿼리는 데이터 집합에서 트리 릿의 모든 발생을 반환해야합니다.

효율적인 알고리즘이 있습니까?

서 픽스 배열과 같은 것을 생각하고 있었지만 검색 트리 릿은 임의의 모양이 될 수 있기 때문에 순진하게 트리를 문자열로 (노드의 고정 순회 순서에 따라) 작동하지 않습니다.

최신 정보:

내가 기대하는 일반적인 인스턴스에 대한 세부 정보 :

데이터 세트는 적어도 수만 개의 트리로 구성되며 각각 약 2 만에서 30 개의 노드로 구성됩니다. 나무는 이진이 아니지만 노드 당 일반적인 자식 수는 작습니다 (일부 경우에는 약 30 개에 달할 수 있지만 일반적으로 4-5 개 이하). 라벨 수는 수만입니다.

NLP 응용 프로그램의 경우 필요합니다. 각 트리는 문장의 종속성 구문 분석이 될 것입니다. 각 노드는 단어 발생을 나타내며 각 레이블에는 사전 단어가 있습니다 (일부 장식 포함).


1
이 책 에서는 서브 트리 동 형사상을위한 병렬 알고리즘에 대해 설명합니다.
Anthony Labarre

1
죄송합니다. 연결된 하위 그래프를 찾고 있다고 생각했는데, 해당 하위 트리는 주어진 나무 세트에 나타나는 나무 일 것입니다. 문제가이 설명과 어떤 측면에서 다른지 명확히 할 수 있습니까?
Anthony Labarre 2016 년

1
나무에 대해 미리 알고 있습니까? 이진? 몇 개의 다른 노드 레이블을 기대하십니까? 공간 효율성에 대한 제한이 있습니까? 동일한 데이터 세트에서 수많은 쿼리를 실행하는 경우 솔루션에 일종의 적극적인 색인 생성이 포함될 수 있기 때문에 묻습니다.
Eli

1
XML 나뭇 가지 일치에 익숙하십니까? 문제가 특별한 경우 인 것 같으므로 기존 알고리즘 및 소프트웨어를 간단히 사용할 수 있습니다.
Marek Chrobak

2
그래프 구조를 무시하는 것이 가장 좋을 것 같습니다. 일반적인 쿼리가 주어지면 구조를 버릴 경우 이러한 단어가 모두 몇 개나 될 것으로 예상됩니까? 검색어에 와일드 카드가 포함되어 있습니까, 아니면 정확합니까? 쿼리의 단어가 "고양이가 모자를 먹었다"와 같은 경우 실제로 "cat"와 "hat"이라는 단어가 모두있는 그래프는 몇 개입니까? 각 단어를 한 세트의 나무에 색인화하고 모든 세트를 교차 시키면 너무 많은 비용을 들이지 않고도 순진하게 결과를 검색 할 수 있습니다.
Eli

답변:


3

(뿌리) 나무를 특별히 목표로하지는 않았지만 G-trie 데이터 구조 는 귀하의 설정에서 상당히 잘 수행 될 수 있다고 생각 합니다. 트리 (문자열 세트 검색 용)를 그래프에 적용한 것입니다.


1

얼마 전 Ronald Read의 트리 캐논 화 알고리즘을 작성하여 wikipedia에 넣었습니다 .

각 내부 노드 서명에 대한 해시 테이블을 만들고 그들이 가져온 하위 트리에 대한 포인터 목록으로 레이블을 지정합니다. 그러나 진정한 잎이있는 나무 줄기에서만 작동합니다.

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