나는 나무의 큰 데이터 세트를 가지고 내가 지정하여 검색하고자하는 treelet (연결 서브 그래프 참조). 쿼리는 데이터 집합에서 트리 릿의 모든 발생을 반환해야합니다.
효율적인 알고리즘이 있습니까?
서 픽스 배열과 같은 것을 생각하고 있었지만 검색 트리 릿은 임의의 모양이 될 수 있기 때문에 순진하게 트리를 문자열로 (노드의 고정 순회 순서에 따라) 작동하지 않습니다.
최신 정보:
내가 기대하는 일반적인 인스턴스에 대한 세부 정보 :
데이터 세트는 적어도 수만 개의 트리로 구성되며 각각 약 2 만에서 30 개의 노드로 구성됩니다. 나무는 이진이 아니지만 노드 당 일반적인 자식 수는 작습니다 (일부 경우에는 약 30 개에 달할 수 있지만 일반적으로 4-5 개 이하). 라벨 수는 수만입니다.
NLP 응용 프로그램의 경우 필요합니다. 각 트리는 문장의 종속성 구문 분석이 될 것입니다. 각 노드는 단어 발생을 나타내며 각 레이블에는 사전 단어가 있습니다 (일부 장식 포함).
1
이 책 에서는 서브 트리 동 형사상을위한 병렬 알고리즘에 대해 설명합니다.
—
Anthony Labarre
죄송합니다. 연결된 하위 그래프를 찾고 있다고 생각했는데, 해당 하위 트리는 주어진 나무 세트에 나타나는 나무 일 것입니다. 문제가이 설명과 어떤 측면에서 다른지 명확히 할 수 있습니까?
—
Anthony Labarre 2016 년
나무에 대해 미리 알고 있습니까? 이진? 몇 개의 다른 노드 레이블을 기대하십니까? 공간 효율성에 대한 제한이 있습니까? 동일한 데이터 세트에서 수많은 쿼리를 실행하는 경우 솔루션에 일종의 적극적인 색인 생성이 포함될 수 있기 때문에 묻습니다.
—
Eli
XML 나뭇 가지 일치에 익숙하십니까? 문제가 특별한 경우 인 것 같으므로 기존 알고리즘 및 소프트웨어를 간단히 사용할 수 있습니다.
—
Marek Chrobak
그래프 구조를 무시하는 것이 가장 좋을 것 같습니다. 일반적인 쿼리가 주어지면 구조를 버릴 경우 이러한 단어가 모두 몇 개나 될 것으로 예상됩니까? 검색어에 와일드 카드가 포함되어 있습니까, 아니면 정확합니까? 쿼리의 단어가 "고양이가 모자를 먹었다"와 같은 경우 실제로 "cat"와 "hat"이라는 단어가 모두있는 그래프는 몇 개입니까? 각 단어를 한 세트의 나무에 색인화하고 모든 세트를 교차 시키면 너무 많은 비용을 들이지 않고도 순진하게 결과를 검색 할 수 있습니다.
—
Eli