総合的なグラフの世界へようこそ!あなたが開発者で、「グラフ」という用語から円グラフや棒グラフのイメージしか思い浮かばない場合は、視野を広げる準備をしてください。データ構造という意味では、グラフは多くの複雑なコンピューター サイエンスの問題や現実世界のアプリケーションの影の主役です。ソーシャル ネットワークやレコメンデーション エンジンから、ポイント A からポイント B までの最短経路の検索に至るまで、グラフはすべてを行います。このガイドでは、基礎から高度なグラフ アルゴリズムまですべてをカバーします。バックルを締めてください。知識、ユーモア、コード スニペットが満載のワイルドな冒険になるので、あなたも Java グラフの達人になれるでしょう!
その核心であるグラフは、エッジで接続されたノード(頂点)の集合です。線形 (配列やリンク リストなど) である平均的なデータ構造とは異なり、グラフではより複雑な関係が可能になります。
グラフ GGG は、G=(V,E)G = (V, E)G=(V,E) として定義されます。
友情を表す簡単なグラフを考えてみましょう:
グラフは有向または無向にすることができます。有向グラフで、アリスがボブを指した場合、アリスが「ねえ、ボブ、私はあなたをフォローしていますが、あなたは私をフォローしません。」
と言っていると考えてください。2D 配列 adj[i][j]adj[i][j]adj[i][j] が次の場合に使用されます。
ノード i と j の間にエッジがある場合、adj[i][j]=1adj[i][j] = 1adj[i][j]=1。
ii
じょ
adj[i][j]=weightadj[i][j] =weightadj[i][j]=グラフに重みが付けられている場合の重み。
長所:
高速検索: O(1) でエッジが存在するかどうかを確認します。
お(1)お(1)
密度の高いグラフに最適です。
短所:
int[][] adjMatrix = new int[n][n]; // n is the number of vertices // Add an edge between vertex 1 and 2 adjMatrix[1][2] = 1;
各インデックス iii が頂点 iii に接続されているノードのリストを保持する配列またはリスト。まばらなグラフに最適です。
長所:
短所:
エッジの存在の検索には O(n) がかかります。
O(n)O(n)
int[][] adjMatrix = new int[n][n]; // n is the number of vertices // Add an edge between vertex 1 and 2 adjMatrix[1][2] = 1;
すべてのエッジの単純なリスト。各エッジはペア (または重み付きグラフの場合はトリプレット) として表されます。
長所:
短所:
List<List<Integer>> adjList = new ArrayList<>(); for (int i = 0; i < n; i++) { adjList.add(new ArrayList<>()); } // Add an edge between vertex 1 and 2 adjList.get(1).add(2);
幅優先検索 (BFS):
時間計算量: O(V E).
O(VE)O(VE)
List<Edge> edges = new ArrayList<>(); edges.add(new Edge(1, 2, 10)); // Edge from 1 to 2 with weight 10
深さ優先検索 (DFS):
時間計算量: O(V E).
O(VE)O(VE)
int[][] adjMatrix = new int[n][n]; // n is the number of vertices // Add an edge between vertex 1 and 2 adjMatrix[1][2] = 1;
複数の開始点がある「特定の種類のノードまでの最短距離」などの問題に最適です。
無向グラフでの連結成分の処理とサイクル検出に強力です。
動的プログラミングをグラフ走査と組み合わせて、反復的な部分問題の解決策を最適化できます。
情報に基づいた推測 (ヒューリスティック) による経路探索に使用されます。ダイクストラと同様に機能しますが、目的地に近いパスを優先します。
ここまで進んだ方は、おめでとうございます!あなたは、グラフの荒波を乗り越えただけでなく、グラフに関連したあらゆる質問に対処するための知識を身につけました。あなたがコーディング コンテスト中毒者、アルゴリズム愛好家、または単にデータ構造コースに合格しようとしている人であっても、このガイドには必要なものがすべて網羅されています。
グラフの世界では、迷った場合はこのガイドに戻ってください。
以上がJava グラフの究極ガイド: あらゆるレベルの開発者のための詳細な解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。