1

行ごとに 1 つのエッジを持つ入力が与えられたツリーを構築しようとしている場合、エッジは接続する 2 つの頂点によって表されます。Node 構造体/クラスを使用してツリーを構築することは可能ですか、それともグラフのように隣接リストとして表現する必要がありますか?

私が抱えている主な問題は、入力の順序です。最初はまったく接続されていない 2 つ以上のエッジが与えられた場合、通常はツリーが与えられ、ツリーへの挿入は単に新しいノードを子にするだけですが、接続のない Node オブジェクトがたくさんあります。 (または親?) 別のノードの。

4

2 に答える 2

0

1 つのルート ノードではなく、多くのノードを格納する方法が心配な場合、1 つの方法は、Node への N 個のポインターの配列を持つことです。各ノードに 0 から N - 1 のインデックスが付けられていると仮定します。ここで、N はツリー内のノードの数です。配列の i 番目の要素に i 番目のノード ポインターを格納できます。

ポインターを使用する代わりに、N ノードの配列を一度にスタックに割り当てる場合 (C/C++ の場合)、このアプローチはさらに有益です。これは、メモリ割り当て時間の大幅な改善です。

于 2013-02-20T03:48:09.573 に答える
0

ノードとエッジを保存するために、neo4j などのグラフ データベース テクノロジを利用することを検討したことがありますか? 埋め込み可能です。

私は、アルゴリズムをグラフ化するために、scala の tinkerpop 設計図を含む埋め込み orientdb を広範囲に使用しました。これらの問題とグラフ アルゴリズムの構築を簡単にするこれらのテクノロジを確認することをお勧めします。

プロパティ グラフ データベースはインデックスを使用してタイプのルックアップを許可するため、ノードを見つけてそこからグラフのトラバースを開始できます。車輪を再発明する必要はありません。

主な概念は次のとおりです。ノード、エッジ、プロパティ (ノードまたはエッジのいずれかに存在できます。エッジ タイプ (たとえば、ソーシャル グラフで「知っている」)。トラバーサル方向を決定するためのアウト側とイン側。そして、ノードを「タイプ」してルックアップを可能にする前述のインデックス。

各ノードは、エッジのインまたはアウトに対してクエリを実行でき、エッジのタイプとプロパティを調べることができます。

于 2013-02-21T05:17:26.017 に答える