これはあなたが探しているものですか?関係をモデル化/グラフ化するのにGraphviz dotを使うことができます。ここではより多くのあなたの明確化などの.DOTファイルの更新内容、です:あなたは、重複クラスタを作成することはできませんので
digraph G {
compound = true // allow edges between clusters
subgraph cluster_ab {
rank = same;
A -> B -> A
}
A -> C [ltail=cluster_ab]
A -> D [ltail=cluster_ab]
A -> E [ltail=cluster_ab]
subgraph cluster_ef {
rank = same;
E -> F -> E
}
E -> G [ltail=cluster_ef]
E -> H [ltail=cluster_ef]
subgraph cluster_ei {
E -> I -> E
}
I -> J [ltail=cluster_ei]
I -> K [ltail=cluster_ei]
}
sample dot output http://img21.imageshack.us/img21/6177/64094067.png
この1つは少し異なっているが、(E-> IおよびE- > F)。しかし、私はそれがEと私が兄弟であることがひどくはっきりしていないにもかかわらず、あなたが明確にしたようなものだと思う - 私はJからJにリンクすることを確かめなければならなかった。それは少し醜い見えた。
私はこのような種類のグラフを手作業ではなく動的に生成することができるplenty of libraries that interface with Graphviz/dotがあります。次に、有向グラフを格納/取得するためのライブラリが既に用意されている場合は、階層データの格納にかなりの時間がかかります。 のように、あなたの質問で言及したように...あなたが格納しているデータの量によって異なります。
@Kimはコメントで指摘するように、あなたはペアではなく、個々のノードとして兄弟を処理することにより、非常に単純化したグラフを得ることができます。
digraph G {
"A,B" -> C
"A,B" -> D
"A,B" -> E
"E,F" -> G
"E,F" -> H
"E,I" -> J
"E,I" -> K
}
それは私が完全に見落とし明白かつエレガントなソリューションですオーバーラップが発生した場合(兄弟関係についてはもう少しあいまいですが)、Eが再度発生します。
simpler graph http://img35.imageshack.us/img35/8969/so2b.png
偉大な答えをありがとう - 私はこのプロジェクトを探していますが、私は間違いなくそれを使用することができます。私の例では、C、D、EはすべてAとBの両方の子孫です(Fと私は別のものの子孫ですが、必ずしも同じではありません)。明快さの欠如のために申し訳ありません。 –
私は、これが私が探しているものではないかもしれないと言うべきです。 –
あなたの答えの献身のために+1 – Matias