0

大きなグラフがある場合、メモリに引き戻すことなく、できれば簡単にトラバースできるように保存するにはどうすればよいですか。この質問は、プラットフォームと言語の両方に依存しません。間違ったプラットフォームで無理やり問題を解決しようとするのではなく、問題に合った言語とプラットフォームを選択します。

4

4 に答える 4

1

その目的のために特別に調整されたデータベースシステム、すなわちグラフデータベースが存在します。私自身は使ったことがありませんが、この記事にはそのようなシステムがいくつかリストされており、そのうちのいくつかは無料です。

完全を期すために:すべてをメモリにロードせずに通常のSQLデータベースに格納されたグラフを操作することは可能ですが、面倒です(そしてあまり効率的ではありません)。可能なことの例として、私の友人がT-SQLでダイクストラの最短経路アルゴリズムを実装しました...

于 2012-07-16T17:23:53.890 に答える
1

おそらくグラフデータベースがあなたのニーズに合うでしょう。Neo4Jは、このようなデータベースシステムのJava実装です。

于 2012-07-16T17:24:13.510 に答える
0

データベースには、グラフ トラバーサルなどの問題に役立つ機能がますます増えています。

SQL Server は、この目的に適した再帰的な CTE を提供します。Oracle には「connect by」があり、同じ目的を果たすことができます。

これが「簡単」かどうかは、SQL プログラミングのスキルに依存します。答えはノーだと思います。

ただし、データベースに適したシステムを使用している場合は、そのようなグラフをトラバースする必要があることを除けば、グラフを多くのデータベース システムに適合させることができます。

于 2012-07-16T18:45:51.117 に答える
0

そうですね、単純にグラフをノードのリストとして保存し、各ノードに一意の ID を付けて、隣接するノード ID のリストをノードと共に保存することができます。

したがって、基本的に、データベースからグラフ全体を取得せずに隣接ノード ID を確認し、隣接ノードについてデータベースにクエリを実行できます。(ノード ID は主キーの有力な候補です。)

于 2012-07-16T17:33:30.393 に答える