[ CS/DataStructure ] Graph
7864 ワード
Graph
グラフは簡単に言えば頂点と幹線の集合です.以前認識した木もグラフです.しかし、木は循環の形成を許さない.
グラフィック用語
Vertex & Edge
Undirected Graph & Directed Graph
Undirected Graph
その名の通り、頂点と幹線の接続に方向性のないグラフです.
V = {1, 2, 3, 4, 5, 6}
E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)}
(u, v) = vertex # u와 vertex v를 연결하는 edge
Directed Graph
名前の通り、頂点と幹線の接続に方向性を持つグラフです.
V = {1, 2, 3, 4, 5, 6}
E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)}
(u, v) = vertex # u에서 vertex v로 가는 edge
Degree
重み付きグラフィック(Weight Graph)とローカルグラフィック(SubGraph)
加重パターン
重み付け図は、幹線に重み付けを加えた構成の図です.幹線を渡るときは重みを計算します.通常、「最小コストで目的地に到着する」などの問題に使用されます.
重み付けされていないグラフィック
非重み付け図はその名の通り幹線に重み付けがない図です.すべての幹線の周易度が同じパターンも存在する.
ローカルグラフィック
これは、グラフに適用される部分集合に似た概念です.元の図形の一部の頂点と一部の幹線からなる図形を指す.
グラフィックの表示
隣接行列
正方形マトリクスを用いてグラフィックを表す方法では,対応する位置のvalue値により,頂点間の接続関係がO(1)の時間的複雑さで理解できる.頂点個数に関係なく、O(V(頂点)^2)の空間的複雑さがある.密な図形(密な図形:幹線の数が多い図形)を表現するのに適しています.(スペースの複雑さが高いので)
隣接リスト
各頂点の隣接リストを表示するには、接続リストを使用してグラフィックを表す方法が必要なため、頂点間の接続を確認するには時間がかかります.空間的複雑度はO(E+V)であった.疎図形を表すのに適しています.(幹線の数が空間的複雑さに反映されるため)
図面内のナビゲーション
図形は頂点の構成だけでなく,幹線の接続にも特定の規則がないため,ナビゲーションが複雑である.図面内のすべての頂点を参照するには、次の方法を使用します.
深度優先ナビゲーション(DFS:Depth First Search)
グラフィックで、接続された頂点を任意の頂点から優先的に検索する方法.接続可能な頂点があるまで接続を続け、再接続可能な頂点がない場合は、すぐに前のステップに戻り、接続可能な頂点を参照します.深度優先探索にはStackを用いて実現する.時間的複雑度はO(V+E)であった.(V:Vertex(頂点)、E:Edge(幹線)
幅優先ナビゲーション(BFS:Breadth First Search)
これは、任意の頂点から接続されたすべての頂点をグラフィックで優先的に検索する方法です.同じレベルの頂点をツリーで優先的に検索するようにします.Queueを使用して、頂点の順序を記録します.参照を開始する頂点は、Queueのenqueue、dequeue、およびdequeueの頂点に関連付けられた頂点です.これは、頂点をアクセス順にQueueに格納する方法です.時間的複雑度はO(V+E)であった.(V:Vertex(頂点)、E:Edge(幹線)
BFS로부터 도출된 경로는 최단 경로를 보장한다.
最小拡張ツリー(MST:Minimum生成ツリー)
Spanning Tree
グラフィック内のすべての頂点を含むツリーは、グラフィックの最小接続部分のグラフィックです.n個の頂点を有する図の最小幹線個数はn−1であり、n−1個の幹線を有する局所図は必然的にツリーの形式を有する.この木は新疆の木です.簡単に言えば、グラフの中でいくつかの幹線で作られた木が選択されていると言えます.
ツリーフィーチャーの生成
Minimum Spanning Tree
これは、生成ツリーで使用される幹線重み付けと最小の生成ツリーを意味する.各幹線の重みが等しくない場合,単純に重みの最小の幹線を用いてMSTになるわけではない.幹線の重み付けを考慮して、最小費用の生成ツリーを選択します.
Minumum生成ツリーのプロパティ
Minimum生成ツリーの実装
Kruskal Algorithm
これはGreedy法を用いてネットワークのすべての頂点を最小費用で接続する最適な解法である.初期化操作により、幹線がない場合は頂点のみで図形を構成し、その後、幹線を重み付け昇順に並べます.次に、整列した幹線の中から周期を形成しない幹線を選択し、順次追加します.生成ツリーが完了すると、すべての頂点が接続状態で終了し、完了できない図形については、すべての幹線を判断して終了します.
ループを作成するかどうか
グラフィックの各頂点にset-idという値を追加します.初期化プロセスでは、各頂点を1~nの値で初期化します.ここで、0は幹線に接続されていないことを意味します.そして接続するたびにset-idを1つに統一します.値を同じset-id個数のset-id値に統一します.
時間の複雑さ
幹線重み付けの昇順に並べる->O(E log E)
ループを作成しset-id->O(E+V logV)を統一するかどうかを確認します
全時間複雑度->O(E log E)
Prim Algorithm
初期化中の頂点からなる初期図A.Aの頂点と外部の頂点との間の幹線を接続することにより、最小重み付けされた幹線で接続された頂点を追加する.頂点に関係なく、幹線の重み付け値を基準に接続されます.このように接続された頂点がAに追加され、この手順を繰り返して生成ツリーが作成されます.簡単に言えば、これが前の段階で作成された伸び木の拡張方法です.ツリーの幹線がn-1本の場合、このプロセスは終了します.
時間の複雑さ
全時間複雑度->O(E logV)
Reference
この問題について([ CS/DataStructure ] Graph), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/CS-DataStructure-Graphテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol