木のコレクションを検索するための効率的なアルゴリズム


9

大きな木のデータセットがあり、ツリーレット(接続されたサブグラフ)を指定して検索したいのですが。クエリは、データセット内のツリーレットのすべての出現を返す必要があります。

そうするための効率的なアルゴリズムはありますか?

接尾辞配列のようなものを考えていましたが、ツリーの単純な文字列としてのエンコード(ノードの固定のトラバース順序による)は機能しません。検索ツリーレットは任意の形状にすることができるためです。

更新:

私が期待する典型的なインスタンスに関するいくつかの詳細:

データセットは、それぞれが約20〜30のノードで構成される、少なくとも数万の木で構成されます。ツリーはバイナリではありませんが、ノードあたりの一般的な子の数は少なくなります(通常は4または5以下ですが、場合によっては約30に達することもあります)。ラベルの数は数万になります。

NLPアプリケーションではこれが必要です。各ツリーは文の依存解析であり、各ノードは単語の出現を表し、各ノードは辞書の単語にラベルを付けます(装飾が施されています)。


1
この巻では、サブツリー同型の並列アルゴリズムについて説明します。
Anthony Labarre

1
申し訳ありませんが、指定された一連のツリーに表示される接続されたサブグラフ(これは必ずツリーになります)を探していると思いました。あなたの問題がこの説明と異なる点を明確にしていただけませんか?
Anthony Labarre

1
事前に木について何か知っていますか?バイナリ?ノードラベルはいくつありますか?スペース効率に制限はありますか?同じデータセットに対して大量のクエリを実行している場合、解決策にはある種の積極的なインデックス付けが含まれる可能性があるため、私は尋ねます。
Eli

1
XML twigマッチングに精通していますか?あなたの問題は特殊なケースのようですので、既存のアルゴリズムとソフトウェアのどれでも簡単に使用できます。
Marek Chrobak、2011

2
グラフの構造は無視した方がいいのではないでしょうか。典型的なクエリの場合、構造を破棄すると、これらの単語をすべて含むと予想されるツリーの数はいくつですか。クエリにはワイルドカードがありますか、それとも正確ですか?クエリ内の単語が「猫は帽子を食べた」のようなものである場合、実際には「猫」と「帽子」の両方が含まれるグラフはいくつあるでしょうか。各単語をツリーのセットにインデックス付けするだけで、すべてのセットを交差させると、コストをかけずに結果を単純に検索できる可能性があります。
Eli

回答:


3

特に(ルート化された)ツリーを対象とはしていませんが、G-trieデータ構造はあなたの設定で非常にうまく機能すると思います。これは、(文字列のセットを検索するための)トライのグラフへの適応です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.